<?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>229512</bug_id>
          
          <creation_ts>2021-08-25 13:47:44 -0700</creation_ts>
          <short_desc>Remove unnecessary ITP memory store code</short_desc>
          <delta_ts>2021-09-17 16:46:21 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1787288</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-25 13:47:44 -0700</bug_when>
    <thetext>Remove unnecessary ITP memory store code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787293</commentid>
    <comment_count>1</comment_count>
      <attachid>436420</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-25 13:51:13 -0700</bug_when>
    <thetext>Created attachment 436420
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787347</commentid>
    <comment_count>2</comment_count>
      <attachid>436431</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-25 15:14:09 -0700</bug_when>
    <thetext>Created attachment 436431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787365</commentid>
    <comment_count>3</comment_count>
      <attachid>436433</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-25 15:58:28 -0700</bug_when>
    <thetext>Created attachment 436433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787865</commentid>
    <comment_count>4</comment_count>
      <attachid>436433</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2021-08-26 16:18:22 -0700</bug_when>
    <thetext>Comment on attachment 436433
Patch

I didn&apos;t review this line-by-line. You&apos;re change log description makes sense so I&apos;ll just ask a few questions:
1) Did you maintain any relevant commenting in the code you&apos;re deleting? We may have insights in there we don&apos;t want to lose.
2) Did you delete the obsolete test cases? (Sorry to be so lazy)
3) Did you delete the obsolete TestRunner and test API functionality?
4) Did you search for and change text references to ResourceLoadStatisticsMemoryStore and ResourceLoadStatisticsDatabaseStore?
5) Did you remove &quot;Memory&quot; and &quot;Database&quot; from any remaining TestRunner and test API changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787872</commentid>
    <comment_count>5</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-26 16:38:21 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #4)
&gt; Comment on attachment 436433 [details]
&gt; Patch
&gt; 
&gt; I didn&apos;t review this line-by-line. You&apos;re change log description makes sense
&gt; so I&apos;ll just ask a few questions:
&gt; 1) Did you maintain any relevant commenting in the code you&apos;re deleting? We
&gt; may have insights in there we don&apos;t want to lose.

Yes, I copy-pasted all existing code.

&gt; 2) Did you delete the obsolete test cases? (Sorry to be so lazy)

Alex removed most test cases when he deleted the plist in https://bugs.webkit.org/show_bug.cgi?id=217063. I see a couple API tests that were missed, I&apos;ll remove those as well.

&gt; 3) Did you delete the obsolete TestRunner and test API functionality?

Not needed, this was done in https://bugs.webkit.org/show_bug.cgi?id=217063.

&gt; 4) Did you search for and change text references to
&gt; ResourceLoadStatisticsMemoryStore and ResourceLoadStatisticsDatabaseStore?

Yes, big find + replace.

&gt; 5) Did you remove &quot;Memory&quot; and &quot;Database&quot; from any remaining TestRunner and
&gt; test API changes.

No! I need to do this.

Thanks for the comments!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787876</commentid>
    <comment_count>6</comment_count>
      <attachid>436589</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-08-26 16:56:27 -0700</bug_when>
    <thetext>Created attachment 436589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789466</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-01 13:48:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/82644309&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794525</commentid>
    <comment_count>8</comment_count>
      <attachid>438493</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-09-17 11:30:29 -0700</bug_when>
    <thetext>Created attachment 438493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794654</commentid>
    <comment_count>9</comment_count>
      <attachid>438493</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2021-09-17 15:46:08 -0700</bug_when>
    <thetext>Comment on attachment 438493
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794655</commentid>
    <comment_count>10</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2021-09-17 15:46:56 -0700</bug_when>
    <thetext>I assume you&apos;ll take care of the things we discussed above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794668</commentid>
    <comment_count>11</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2021-09-17 16:05:41 -0700</bug_when>
    <thetext>(In reply to John Wilander from comment #10)
&gt; I assume you&apos;ll take care of the things we discussed above.

Yes, I handled test changes in this patch, and will address everything else (keeping commenting, and changing text references) in the part 2 of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1794694</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-09-17 16:46:20 -0700</bug_when>
    <thetext>Committed r282711 (241848@main): &lt;https://commits.webkit.org/241848@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 438493.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436420</attachid>
            <date>2021-08-25 13:51:13 -0700</date>
            <delta_ts>2021-08-25 15:57:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229512-20210825135112.patch</filename>
            <type>text/plain</type>
            <size>545683</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYwYzkwNDkwMTU1MzA0M2I1
YTIzNjAwMDU3ZWQzZjNiODcyNDRhZjYuLjhmYjQ5YTQwNjRkOTcxZGFlMDBiZTFkMDA1MDc3NGM0
OWY3MDExYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMwIEBACisyMDIxLTA4LTI1ICBLYXRlIENo
ZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBJVFAgbWVtb3J5IHN0b3JlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTUxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzA3
NDMyNTg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFBDTSBhbmQgSVRQIGxheW91dCBhbmQg
QVBJIHRlc3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgYW5kIG1lcmdlcworICAgICAgICBmdW5jdGlvbnMgZnJvbSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSB3aXRoIGl0cyBwYXJlbnQKKyAgICAgICAg
Y2xhc3MgdG8gaGF2ZSBhIHNpbmdsZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3Mu
CisKKyAgICAgICAgSSB0b29rIHRoaXMgY2hhbmNlIHRvIGFsc28gdHJ5IGFuZCBiZXR0ZXIgb3Jn
YW5pemUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBoZWFkZXIgZmls
ZSB0byBjbHVtcCByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlci4gQW5kLCBJIHJlbW92ZWQgc29t
ZQorICAgICAgICB1bnVzZWQgZnVuY3Rpb25zIEkgZm91bmQgd2hlbiBtaWdyYXRpbmcuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL09wZXJhdGluZ0RhdGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRl
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgTW92ZSBPcGVyYXRpbmdEYXRlIGNvZGUgdG8g
aXRzIG93biBmaWxlIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mCisgICAgICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEpOgor
ICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToK
KyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAg
KFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Om5l
ZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpvcGVuSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNj
aGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlz
c2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVkU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6aW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmludGVycnVwdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlVW5pcXVlSW5k
aWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3Jl
YXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpkZXN0cm95U3RhdGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZUFu
ZE1ha2VEb21haW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0
aWMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdl
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OmpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0VGhp
cmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6aGFzQmVlblRoaXJkUGFydHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpbmROb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFj
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFsbERvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0
S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4
cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxC
dXRDb29raWVzRm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3Ry
YWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUxhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OmFwcGVuZEJvb2xlYW4pOgorICAgICAgICAo
V2ViS2l0OjphcHBlbmROZXh0RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGlj
U3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRp
c3RpY3NFeHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlVW5hdHRyaWJ1dGVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphdHRyaWJ1dGVQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJTZW50QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0YW5kYWxvbmVB
cHBsaWNhdGlvbkRvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhck9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6d29ya1F1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om1vbnRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6bW9udGhEYXkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdE
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc01lbW9yeVN0b3Jl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc0RhdGFiYXNlU3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9y
eVN0b3JlRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlQ29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VzcGVuZCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om1vbnRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
bW9udGhEYXkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRp
bmdEYXRlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0wOC0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFtSQlNUYXJnZXQgdGFyZ2V0V2l0aFBpZDpd
IGR1cmluZyBXZWJQcm9jZXNzUHJveHk6OnNodXREb3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDdmNWIxOTI0MzNlY2FjYjEwMDNhYmQzNWYxMzU0MzViYTE2YWVhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9PcGVyYXRp
bmdEYXRlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wZXJhdGluZ0RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOworICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKK30KKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkp
OworfQorCitTZWNvbmRzIE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9u
dGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0Rh
dGU6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVy
Lm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdE
YXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwor
fQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlOGQyZGIzYzc1ZDljYjJkNjg3YjI1YjlhZWJl
MDBjMjBjOWZiMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0NvbnNvbGVUeXBlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNj
ZXNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
R2VzdHVyZUluZGljYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBJVFBfUkVMRUFTRV9MT0coc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBJVFBfUkVM
RUFTRV9MT0dfRVJST1Ioc2Vzc2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQotCi0vLyBDT1VOVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBv
YnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWRE
b21haW5zIl9zOwotY29uc3RleHByIGF1dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVy
eSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Ci1j
b25zdGV4cHIgYXV0byBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3Vi
cmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0
ZXhwciBhdXRvIGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0ZXhwciBhdXRv
IGNvdW50UHJldmFsZW50UmVzb3VyY2VzUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJl
Z2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9
IDE7Il9zOwotY29uc3RleHByIGF1dG8gY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWlu
KSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDE7Il9zOwotCi1jb25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1Qg
cmVnaXN0cmFibGVEb21haW4pIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMDsiX3M7Ci0KLS8vIElOU0VSVCBPUiBJR05P
UkUgUXVlcmllcwotY29uc3RleHByIGF1dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJ
TlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2Vlbiwg
aGFkVXNlckludGVyYWN0aW9uLCIKLSAgICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUs
IGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIK
LSAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9t
YWluUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChk
b21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50
byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxl
RG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUg
aW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50IChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZy
b21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURv
bWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVn
aXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBpbiAoICJfczsKLQotLy8gSU5TRVJUIE9SIFJFUExBQ0UgUXVlcmllcwotY29uc3RleHBy
IGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBM
QUNFIGludG8gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwg
bGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyB3aGVyZSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKLWNvbnN0
ZXhwciBhdXRvIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0
VXBkYXRlZCwgZnJvbURvbWFpbklEKSBTRUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0
byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFp
bklELCBsYXN0VXBkYXRlZCwgdG9wRnJhbWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwot
Y29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VS
VCBPUiBSRVBMQUNFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3Vy
Y2VEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsK
LWNvbnN0ZXhwciBhdXRvIGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwg
IgotICAgICJzb3VyY2VJRCwgdGltZU9mQWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQp
IFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3M7Ci1jb25zdGV4cHIgYXV0byBpbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFD
RSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFp
bklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgotICAgICJzb3VyY2VJRCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSwgcHJpb3JpdHksIHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
LQotLy8gRVhJU1RTIFF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCi0gICAg
IkFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMg
KFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCi0gICAgIldI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVD
VCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gIgotICAgICJBTkQgdG9E
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Ci1jb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCi0gICAgIkFO
RCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVM
b2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURv
bWFpbklEID0gPyAiCi0gICAgIkFORCBzdWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKLWNvbnN0ZXhwciBhdXRvIHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJ
U1RTIChTRUxFQ1QgMSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVS
RSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotCi0v
LyBVUERBVEUgUXVlcmllcwotY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9
ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKLSAgICAiV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVy
eSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1v
dmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVk
ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byB1cGRh
dGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlz
UHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIg
YXV0byB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ZlcnlQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9
IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRl
R3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRv
IHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byBz
ZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQ
REFURSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGlj
ayA9IC0xLjAiX3M7Ci1jb25zdGV4cHIgYXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVy
eSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBB
TkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gbWFya1Jl
cG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVs
bCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCA9ID8iX3M7Ci0KLS8vIFNFTEVDVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBkb21haW5JREZy
b21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzUHJldmFs
ZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBh
dXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJl
ZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIDwgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFYKGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVw
ZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9t
YWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyJfcwotICAgICJVTklPTiBBTEwgU0VM
RUNUIGxhc3RVcGRhdGVkIEZST00gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRv
RG9tYWluSUQgPSA/IGFuZCBmcm9tRG9tYWluSUQgPSA/IgotICAgICJVTklPTiBBTEwgU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCi0gICAgIlVO
SU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7
Ci1jb25zdGV4cHIgYXV0byBnZXRBbGxEb21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxl
RG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOwotY29uc3RleHByIGF1dG8gZ2V0QWxsU3Vi
U3RhdGlzdGljc1VuZGVyRG9tYWluUXVlcnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IgotICAgICJVTklPTiBBTEwgU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgotICAg
ICJVTklPTiBBTEwgU0VMRUNUIHRvRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8g
YWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOwot
Y29uc3RleHByIGF1dG8gYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkg
PSAiU0VMRUNUICosIE1JTihlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1l
VG9TZW5kVG9EZXN0aW5hdGlvbikgYXMgbWluVmFsICIKLSAgICAiRlJPTSBBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMg
Tk9UIE5VTEwgQU5EIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwg
IgotICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFz
IG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIElTIE5VTEwgIgotICAgICJVTklPTiBBTEwgU0VM
RUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlIElTIE5VTEwgT1JERVIgQlkgbWluVmFsIl9zOwotY29uc3RleHByIGF1dG8gZmluZFVu
YXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25T
aXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBz
b3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7
Ci1jb25zdGV4cHIgYXV0byBlYXJsaWVzdFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlLCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21h
aW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotLy8gRVhJU1RT
IGZvciB0ZXN0aW5nIHF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3Rz
UXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0
aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5JRCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzY3JpcHRMb2FkRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1l
RG9tYWluSUQgPSA/IE9SIHN1YnJlc291cmNlRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBh
dXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9S
IHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhp
c3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1l
RG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVl
cnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJf
czsKLWNvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBF
WElTVFMgKFNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyki
X3M7Ci0KLS8vIERFTEVURSBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVl
cnkgPSAiREVMRVRFIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsK
LWNvbnN0ZXhwciBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRR
dWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBX
SEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgTElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
IExJS0UgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkgPSAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRl
RG9tYWluSUQgTElLRSA/Il9zOwotY29uc3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBXSEVSRSA/ID4gdGltZU9mQWRDbGljayJfczsKLWNvbnN0ZXhwciBhdXRv
IHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2
ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9tYWlucyAoIgotICAgICJkb21haW5J
RCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCi0gICAgImhh
ZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIK
LSAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVH
RVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKLSAgICAi
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9U
IE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5U
RUdFUiBOT1QgTlVMTCwiCi0gICAgImlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7Ci0KLWVudW0gewotICAgIERvbWFpbklESW5kZXgsCi0g
ICAgUmVnaXN0cmFibGVEb21haW5JbmRleCwKLSAgICBMYXN0U2VlbkluZGV4LAotICAgIEhhZFVz
ZXJJbnRlcmFjdGlvbkluZGV4LAotICAgIE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5k
ZXgsCi0gICAgR3JhbmRmYXRoZXJlZEluZGV4LAotICAgIElzUHJldmFsZW50SW5kZXgsCi0gICAg
SXNWZXJ5UHJldmFsZW50SW5kZXgsCi0gICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAotICAg
IElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxJbmRleAotfTsKLQotY29uc3Rl
eHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERv
bWFpbnMgKCIKLSAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05T
VFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgotICAgICJS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OwotICAgIAotY29uc3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zID0gIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
KCIKLSAgICAiZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKLSAgICAiQ09OU1RSQUlOVCBma0RvbWFp
bklEIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAgICAi
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBL
RVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAo
IgotICAgICJzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5D
RVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgotICAgICJG
T1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoIgotICAgICJ0YXJnZXREb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
LCAiCi0gICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8g
Y3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFt
ZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIKLSAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgIgotICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkoZnJv
bURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzICgiCi0gICAgInRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3Vy
Y2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvcEZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVO
Q0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1j
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFU
RSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCi0gICAgInN1YkZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgbGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotICAgIAot
Y29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJD
UkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgotICAgICJzdWJy
ZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5V
TEwsIHRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtF
WShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
KSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAg
ICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFM
IE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBL
RVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7
Ci0gICAgCi1jb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgotICAg
ICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgot
ICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7Ci0KLWNvbnN0ZXhwciBhdXRvIGNyZWF0
ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgotICAgICJ5
ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElO
VEVHRVIgTk9UIE5VTEwpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlE
IElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0
b2tlbiBURVhULCBzaWduYXR1cmUgVEVYVCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNl
U2l0ZURvbWFpbklEKSAiCi0gICAgIlJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklE
KSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQp
IFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50ID0gIkNSRUFURSBUQUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9U
IE5VTEwsICIKLSAgICAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBw
cmlvcml0eSBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIK
LSAgICAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0
dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVB
TCwgIgotICAgICJGT1JFSUdOIEtFWShzb3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMo
ZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotLy8gQ1JFQVRFIFVOSVFVRSBJTkRF
WCBRdWVyaWVzLgotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFp
bklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BM
ZXZlbERvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVY
IElGIE5PVCBFWElTVFMgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudF9zb3VyY2VEb21haW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5J
RCwgdG9Eb21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJ
U1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWlu
SUQgb24gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21E
b21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxp
bmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5
U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c190b3BGcmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQg
b24gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1
YnJlc291cmNlRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3Rv
cEZyYW1lRG9tYWluSUQgb24gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1l
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJy
ZXNvdXJjZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb19zdWJyZXNvdXJjZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3VicmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJv
bURvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGlu
Z0RhdGVzID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRl
c195ZWFyX21vbnRoX21vbnRoRGF5IG9uIE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1v
bnRoRGF5ICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVY
SVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWlu
SURfZGVzdGluYXRpb25TaXRlRG9tYWluSUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICki
X3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlv
blNpdGVEb21haW5JRCBvbiBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3Vy
Y2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Ci0KLS8vIEFkZCBv
bmUgdG8gdGhlIGNvdW50IG9mIHRoZSBhYm92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9y
IHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNh
bGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJlY2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgotY29uc3Qg
aW50IGV4cGVjdGVkSW5kZXhDb3VudCA9IDE0OwotCi1zdGF0aWMgY29uc3QgU3RyaW5nIE9ic2Vy
dmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKQotewotICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERv
bWFpbjsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyBPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVt
YVYxQWx0ZXJuYXRlKCkKLXsKLSAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9t
YWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBU
RVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBO
VUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBO
VUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1Qg
TlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5V
TEwpIl9zOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZFVuYXR0
cmlidXRlZENvbHVtbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAi
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2si
X3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwotICAgIHJldHVybiBj
b2x1bW5zLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhIl9zLCAicHJpb3JpdHkiX3MsICJ0aW1lT2ZBZENsaWNrIl9zLCAiZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2UiX3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlE
Il9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiJfcyB9KTsKLSAgICByZXR1cm4g
Y29sdW1ucy5nZXQoKTsKLX0KLQotc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVhdGVUYWJsZVNjaGVt
YShjb25zdCBTdHJpbmcmIHNjaGVtYSkKLXsKLSAgICByZXR1cm4gc2NoZW1hLmNvbnRhaW5zKCJS
RUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwotfQotCi1zdGF0aWMgU3RyaW5nIHN0cmlwSW5k
ZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjb25zdCBjaGFyKiBvcmlnaW5hbFF1ZXJ5KQotewot
ICAgIHJldHVybiBTdHJpbmcob3JpZ2luYWxRdWVyeSkucmVwbGFjZSgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIiwgIkNSRUFURSBVTklRVUUgSU5ERVgiKTsKLX0KLQotc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFRh
YmxlQW5kSW5kZXhQYWlyPiYgZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpCi17Ci0gICAg
c3RhdGljIGF1dG8gZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBUYWJs
ZUFuZEluZGV4UGFpcj4gewotICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIHN0ZDo6bWFr
ZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVPYnNlcnZlZERvbWFp
biwgc3RkOjpudWxsb3B0KSB9LAotICAgICAgICB7ICJUb3BMZXZlbERvbWFpbnMiX3MsIHN0ZDo6
bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BMZXZlbERv
bWFpbnMsIHN0ZDo6bnVsbG9wdCkgfSwKLSAgICAgICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4
UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMpKSB9LAotICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3Jl
ZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykpIH0sCi0g
ICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+
PihjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
KSkgfSwKLSAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRl
VW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJU
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHN0
cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIH0sCi0gICAgICAgIHsgIlRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJp
bmc+PihjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzKSkgfSwKLSAgICAgICAgeyAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9y
ZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9
LAotICAgICAgICB7ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIH0sCi0gICAg
ICAgIHsgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0
cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgfSwKLSAgICAgICAgeyAiU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJPcGVyYXRpbmdEYXRlcyJfcywg
c3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZU9wZXJh
dGluZ0RhdGVzLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVl
SW5kZXhPcGVyYXRpbmdEYXRlcykpIH0sCi0gICAgICAgIHsgIlVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIHN0cmlw
SW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfSwKLSAgICAgICAgeyAiQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPj4oY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB9Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIGV4
cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotc3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgQ29udGFpbmVyVHlwZSYg
dmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGlj
X3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUodmFsdWUpPj4pCi0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHko
KSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLX0KLQotSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZSo+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsU3RvcmVz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKj4+
IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1
ZSwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi0g
ICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSwgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCkKLSAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCAib2JzZXJ2
YXRpb25zLmRiIl9zKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24obV9kYXRhYmFzZSkKLSAgICAsIG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIGVuYWJsZUZvcmVp
Z25LZXlzKCk7Ci0KLSAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3b3JrZXJRdWV1ZSwgdGhl
IHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQgYnkgZGlmZmVyZW50IHRo
cmVhZHMuCi0gICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0gICAgCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCi0gICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsK
LSAgICBhbGxTdG9yZXMoKS5hZGQodGhpcyk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoKQotewot
ICAgIGNsb3NlKCk7Ci0gICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbG9zZSgpCi17Ci0gICAgZGVzdHJv
eVN0YXRlbWVudHMoKTsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQotewotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lzTmV3UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19M
T0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
YXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01B
IGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOwotICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwgc2V0
QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNOZXdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
U2NoZW1hKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1zdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZScgYW5kIHRibF9uYW1lPT8iX3MpOwotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
cHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkua2V5cygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdU
YWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMs
IHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5k
KFN0cmluZyh0YWJsZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsK
LSAgICB9Ci0gICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIG1pc3NpbmdUYWJsZXM7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKLXsK
LSAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOwotICAgIGlmICghZW5hYmxlRm9yZWlnbktl
eXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsK
LSAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0/IEFORCB0eXBl
ID0gJ3RhYmxlJyJfcyk7Ci0gICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9
IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhR
dWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0
YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2No
ZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdl
dFRhYmxlU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwotCi0gICAgYXV0byBnZXRJbmRleFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlwZSA9ICdpbmRleCciX3MpOwotICAgIGlm
ICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldEluZGV4U3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0
YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3Ry
aW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsKLSAgICAgICAgaWYgKCFyYXdJ
bmRleC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwotICAgIH0KLQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4o
V1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRleCkpOwotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFNjaGVtYSgpCi17Ci0gICAgYXV0byBjdXJyZW50U2NoZW1hID0gY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKCJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpLmZpcnN0OwotCi0gICAgaWYgKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSAmJiBjdXJyZW50
U2NoZW1hICE9IGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKLXsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7Ci0gICAg
aWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRp
Y2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJy
b3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmIChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3Np
bmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpCi17Ci0gICAgLy8gQ2hlY2sgYSB0YWJsZSBm
b3IgYSByZWZlcmVuY2UgdG8gVG9wTGV2ZWxEb21haW5zLCBhIHNpZ24gb2YgdGhlIG9sZCBzY2hl
bWEuCi0gICAgYXV0byBvbGRTY2hlbWEgPSBjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8iX3MpLmZpcnN0OwotICAgIHJldHVybiBuZWVkc05ld0Ny
ZWF0ZVRhYmxlU2NoZW1hKG9sZFNjaGVtYSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFNjaGVtYSgpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBvdGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUg
dG8gdXBncmFkZXMuCi0gICAgLy8gQWxsIG90aGVyIHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0
ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRoZXkgYXJlIGNvcnJlY3QuCi0gICAgaWYgKG1p
c3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlzc2luZ1VuaXF1ZUluZGljZXMoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFu
ZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBVTlVTRURfUEFSQU0odGFibGUpOwot
ICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBl
Y3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGlu
c2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCi17Ci0gICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1
YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRlZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBf
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBHUk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0
b3BGcmFtZURvbWFpbklEIl9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBz
dWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZS
T00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VE
b21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7Ci0KLSAgICBpZiAodGFibGUgPT0gIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxhc3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9N
IF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWlu
SUQsIHRvRG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklE
LCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWluSUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQsIGZyb21Eb21haW5JRCJfcyk7Ci0KLSAgICBp
ZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKLSAgICAg
ICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFTEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRl
c3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJRCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tl
biwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
Il9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJ
TlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJp
Z2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9mQWRDbGljayksIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAg
Qlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcyk7Ci0KLSAg
ICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJU
IElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJTkNUICogRlJPTSBfIiwgdGFibGUpKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoIW5lZWRzVXBkYXRlZFNjaGVtYSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3Rl
ZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAgIGF1dG8gYWx0ZXJUYWJs
ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiQUxURVIgVEFC
TEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJsZSkpOwotICAgICAgICBpZiAoIWFsdGVy
VGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY3JlYXRlU2NoZW1hKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBhdXRvIG1pZ3JhdGVUYWJs
ZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
dGFibGUpOwotICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0
YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdyYXRlIHNjaGVtYSwg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUpKTsKLSAgICAg
ICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3Nh
Z2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghY3JlYXRlVW5pcXVlSW5kaWNlcygpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1
bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0g
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VT
dHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7Ci0KLSAgICBpZiAo
IXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21UYWJsZUlu
Zm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnM7
Ci0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpOwotICAgICAgICBjb2x1bW5zLmFw
cGVuZChuYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxl
KFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBleGlzdGluZ0NvbHVt
bnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQotewotICAgIEFTU0VS
VChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0g
ICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKLSAgICAgICAgaWYgKGV4
aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwotICAgICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRp
bmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgfQotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9
ICJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKLSAgICBjb25zdCBhdXRv
IGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
Il9zOwotCi0gICAgYWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFt
ZSwgY29sdW1uc0ZvclRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRy
aWJ1dGVkQ29sdW1ucygpKTsKLSAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRl
ZFRhYmxlTmFtZSwgY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhp
c3RpbmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUm
JiBleHBlY3RlZENvbHVtbk5hbWUpCi17Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3Rl
ZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1
bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEF0
dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgotICAgIGNvbnN0IGF1dG8g
YXR0cmlidXRlZFRhYmxlTmFtZSA9ICJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3M7Ci0gICAgY29uc3QgYXV0byBvbGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4gPSAiZWFybGll
c3RUaW1lVG9TZW5kIl9zOwotICAgIGNvbnN0IGF1dG8gbmV3RWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zOwotICAgIGNvbnN0IGF1dG8gb2xk
QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbiA9ICJhdHRyaWJ1dGVPblNpdGVEb21haW5JRCJf
czsKLSAgICBjb25zdCBhdXRvIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3M7Ci0gICAgY29uc3QgYXV0byBmb3VuZEF0dHJpYnV0ZWRU
YWJsZUNvbHVtbnMgPSBjb2x1bW5zRm9yVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSk7Ci0KLSAg
ICBpZiAoZm91bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zLmNvbnRhaW5zKG9sZEVhcmxpZXN0VGlt
ZVRvU2VuZENvbHVtbikpCi0gICAgICAgIHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRh
YmxlTmFtZSwgb2xkRWFybGllc3RUaW1lVG9TZW5kQ29sdW1uLCBuZXdFYXJsaWVzdFRpbWVUb1Nl
bmRDb2x1bW4pOwotCi0gICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlu
cyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKSkKLSAgICAgICAgcmVuYW1lQ29sdW1u
SW5UYWJsZShhdHRyaWJ1dGVkVGFibGVOYW1lLCBvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uLCBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKTsKLQotICAgIC8vIFVuYXR0cmli
dXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGNhc2UuCi0gICAgYXV0byB1bmF0dHJpYnV0
ZWRUYWJsZU5hbWUgPSAiVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3M7Ci0g
ICAgYXV0byBmb3VuZFVuYXR0cmlidXRlZFRhYmxlQ29sdW1ucyA9IGNvbHVtbnNGb3JUYWJsZSh1
bmF0dHJpYnV0ZWRUYWJsZU5hbWUpOwotCi0gICAgaWYgKGZvdW5kVW5hdHRyaWJ1dGVkVGFibGVD
b2x1bW5zLmNvbnRhaW5zKG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4pKQotICAgICAg
ICByZW5hbWVDb2x1bW5JblRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRp
b25EZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdU
YWJsZXNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgYXV0byBtaXNzaW5nVGFibGVzID0gY2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKLSAgICBpZiAoIW1pc3NpbmdUYWJsZXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewotICAg
ICAgICBhdXRvIGNyZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkuZ2V0KHRhYmxlKS5maXJzdDsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kU2xvdyhjcmVhdGVUYWJsZVF1ZXJ5KSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdUYWJsZXMgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5B
bmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCi17Ci0gICAgb3BlbklUUERhdGFiYXNlKCk7Ci0g
ICAgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7Ci0gICAgICAgIGlmICghc3Rh
dGVtZW50KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJs
ZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0
ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwotICAgICAgICAg
ICAgY2xvc2UoKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdl
RGlyZWN0b3J5UGF0aCk7Ci0gICAgICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGUgT2JzZXJ2ZWREb21haW5zIHNjaGVtYSBpbiB0aGUg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkaXJlY3RvcnkgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVt
YSwgZGVsZXRlIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgIC8vIEZJWE1FOiBNaWdyYXRlIG9sZCBP
YnNlcnZlZERvbWFpbnMgZGF0YSB0byBuZXcgdGFibGUgc2NoZW1hLgotICAgIGlmIChjdXJyZW50
U2NoZW1hICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKSAmJiBjdXJyZW50U2NoZW1h
ICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUoKSkgewotICAgICAgICBj
bG9zZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURpcmVjdG9y
eVBhdGgpOwotICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFJlbmFtaW5nIGFuZCBhZGRpbmcgY29sdW1ucyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgbWlncmF0aW5nIHRvIGF2b2lkIG1pc21hdGNoZWQgb3IgbWlzc2luZyBjb2x1bW5zLgot
ICAgIHJlbmFtZUNvbHVtbnNJZk5lY2Vzc2FyeSgpOwotICAgIGFkZE1pc3NpbmdDb2x1bW5zSWZO
ZWNlc3NhcnkoKTsKLSAgICBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLX0K
LQotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmlu
ZyYgbG9nU3RyaW5nKSBjb25zdAotewotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgIGF1
dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVl
cnkpOwotICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9Owot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1l
bnQuZ2V0KCkgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW50ZXJydXB0KCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
bV9kYXRhYmFzZS5pbnRlcnJ1cHQoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNv
dW50UXVlcnksICJpc0VtcHR5Il9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc0VtcHR5IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOwotfQotCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzKCkKLXsK
LSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykK
LSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KQot
ICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pCi0g
ICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9w
RnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KQotICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCi0gICAgICAgIHx8ICFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VW5pcXVlSW5kZXhPcGVyYXRpbmdEYXRlcykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2JzZXJ2ZWREb21haW4pKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wTGV2ZWxEb21haW5zKSkgewotICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudCB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNy
ZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZUxv
YWRlZFRoaXJkUGFydHlTY3JpcHRzKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPcGVyYXRpbmdEYXRlcykpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9wZXJhdGluZ0RhdGVzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgewot
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkZXN0cm95U3RhdGVtZW50cygpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX29ic2VydmVkRG9tYWluQ291bnRTdGF0ZW1l
bnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQgPSBudWxs
cHRyOwotICAgIG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0
cjsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZUlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3RvcEZyYW1lTGlu
a0RlY29yYXRpb25zRnJvbUV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV90b3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvdW50UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2NvdW50
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVt
ZW50ID0gbnVsbHB0cjsKLSAgICBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2dldEFsbFN1YlN0YXRpc3RpY3NTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fc3RvcmFnZUFj
Y2Vzc0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9nZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2xpbmtEZWNvcmF0aW9uRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fb2JzZXJ2ZWREb21haW5zRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZUFsbERhdGFTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1faW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRT
dGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NldFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2Ns
ZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2ZpbmRV
bmF0dHJpYnV0ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RUaW1lVG9T
ZW5kU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCA9IG51bGxwdHI7Ci0gICAgbV9tYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCA9IG51bGxwdHI7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbklEKGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGRvbWFpbnMgbm90
IGluIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudCwgaW5zZXJ0
T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydE9ic2VydmVkRG9tYWluIl9zKTsKLSAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91
YmxlKExhc3RTZWVuSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsIGxvYWRTdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChHcmFu
ZGZhdGhlcmVkSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwg
bG9hZFN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgbG9hZFN0
YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIGxvYWRT
dGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nl
c3NBUElJbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
U3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGxv
YWRTdGF0aXN0aWNzLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291cmNlKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWRE
b21haW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiBzdGF0ZW1lbnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFm
aXJzdERvbWFpbklEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXN0YXRlbWVudAotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKmZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHNlY29uZERvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4u
c3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5JbnQoMCk7Ci19Ci0KLVN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbkxpc3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKLSAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQotICAgICAgICBpZiAoZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVSZXNvdXJjZSkuc2Vjb25kKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsICciJywgdG9wRnJhbWVSZXNv
dXJjZS5zdHJpbmcoKSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQot
ewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7Ci0gICAgCi0gICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKLSAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0Ui
KSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91Ymxl
KDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSykgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFp
bklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICAKLSAgICBpZiAoIXJl
Z2lzdHJhYmxlRG9tYWluSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFi
bGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlv
bnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwg
cmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVyeSwgbG9hZFN0YXRpc3Rp
Y3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0cmFibGVEb21haW5JRC52
YWx1ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlJiBtZW1vcnlTdG9yZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICghaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5z
YWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8m
IHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRhKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCi0gICAgLy8gY2FuIHJlZmVyIHRvIHRo
ZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMg
OiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKHN0YXRpc3RpYyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVu
dC0+Y29sdW1uVGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4KTsKLSAgICBhdXRvIGN1cnJlbnRM
YXN0U2VlbiA9IGN1cnJlbnQtPmNvbHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKLSAgICBhdXRv
IGN1cnJlbnRNb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gY3VycmVudC0+Y29sdW1uRG91Ymxl
KE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgpOwotICAgIGJvb2wgY3VycmVudEdy
YW5kZmF0aGVyZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KTsKLSAg
ICBib29sIGN1cnJlbnRJc1ByZXZhbGVudCA9IGN1cnJlbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KTsKLSAgICBib29sIGN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpOwotICAgIHVuc2lnbmVkIGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgp
OwotICAgIGJvb2wgY3VycmVudElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwg
PSBjdXJyZW50LT5jb2x1bW5JbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bEluZGV4KTsKLQotICAgIEFTU0VSVChjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPT0gb3RoZXIu
cmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOwotCi0gICAgaWYgKFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhjdXJyZW50TGFzdFNlZW4pIDwgb3RoZXIubGFzdFNlZW4pCi0gICAgICAgIHVwZGF0
ZUxhc3RTZWVuKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCBvdGhlci5sYXN0U2Vlbik7Ci0KLSAg
ICBpZiAoIW90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICAvLyBJZiBtb3N0IHJl
Y2VudCB1c2VyIGludGVyYWN0aW9uIHRpbWUgaGFzIGJlZW4gcmVzZXQgZG8gc28gaGVyZSB0b28u
Ci0gICAgICAgIGlmICghb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVnaXN0cmFibGVEb21haW4sIGZhbHNl
LCB7IH0pOwotICAgIH0gZWxzZQotICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVn
aXN0cmFibGVEb21haW4sIHRydWUsIHN0ZDo6bWF4KFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhj
dXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIG90aGVyLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKSk7Ci0KLSAgICBpZiAob3RoZXIuZ3JhbmRmYXRoZXJlZCAmJiAhY3VycmVu
dEdyYW5kZmF0aGVyZWQpCi0gICAgICAgIHNldEdyYW5kZmF0aGVyZWQob3RoZXIucmVnaXN0cmFi
bGVEb21haW4sIHRydWUpOwotICAgIGlmIChvdGhlci5pc1ByZXZhbGVudFJlc291cmNlICYmICFj
dXJyZW50SXNQcmV2YWxlbnQpCi0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBpZiAob3RoZXIuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQpCi0gICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgaWYgKG90aGVyLmRhdGFSZWNvcmRz
UmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVjb3Jkc1JlbW92ZWQpCi0gICAgICAgIHVwZGF0ZURhdGFS
ZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNS
ZW1vdmVkKTsKLSAgICBpZiAob3RoZXIuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVz
b3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQot
ICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgc3RhdGlzdGljKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0g
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAibWVyZ2VTdGF0aXN0aWMiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptZXJnZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMg
bm90IGZvdW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQo
KSwgc3RhdGlzdGljKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0
YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0
YXRpc3RpY3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbikpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW5z
ZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzIGlu
c2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0
aXN0aWMoc3RhdGlzdGljKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBm
b3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28gd2UKLSAgICAvLyBjYW4gcmVmZXIgdG8g
dGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMuCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0
aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRp
c3RpYyk7Ci19Ci0KLXN0YXRpYyBBU0NJSUxpdGVyYWwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0
aW5nKCkKLXsKLSAgICByZXR1cm4gIlNFTEVDVCBkb21haW5JRCwiCi0gICAgICAgICIoY291bnRT
dWJGcmFtZVVuZGVyVG9wRnJhbWUgKyBjb3VudFN1YlJlc291cmNlVW5kZXJUb3BGcmFtZSArIGNv
dW50VW5pcXVlUmVkaXJlY3RUbykgYXMgc3VtICAiCi0gICAgICAgICJGUk9NICggIgotICAgICAg
ICAiU0VMRUNUICIKLSAgICAgICAgICAgICJkb21haW5JRCwgIgotICAgICAgICAgICAgIkNPVU5U
KERJU1RJTkNUIGYudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJGcmFtZVVuZGVyVG9wRnJh
bWUsICIKLSAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCByLnRvcEZyYW1lRG9tYWluSUQpIGFz
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lLCAiCi0gICAgICAgICAgICAiQ09VTlQoRElT
VElOQ1QgdG9Eb21haW5JRCkgYXMgY291bnRVbmlxdWVSZWRpcmVjdFRvICIKLSAgICAgICAgIkZS
T00gIgotICAgICAgICAiT2JzZXJ2ZWREb21haW5zIG8gIgotICAgICAgICAiTEVGVCBKT0lOIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgZiBPTiBvLmRvbWFpbklEID0gZi5zdWJGcmFtZURv
bWFpbklEICIKLSAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zIHIgT04gby5kb21haW5JRCA9IHIuc3VicmVzb3VyY2VEb21haW5JRCAiCi0gICAgICAgICJM
RUZUIEpPSU4gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB1IE9OIG8uZG9tYWluSUQgPSB1
LnN1YnJlc291cmNlRG9tYWluSUQgIgotICAgICAgICAiV0hFUkUgaXNQcmV2YWxlbnQgTElLRSA/
ICIKLSAgICAgICAgImFuZCBoYWRVc2VySW50ZXJhY3Rpb24gTElLRSA/ICIKLSAgICAgICAgIkdS
T1VQIEJZIGRvbWFpbklEKSBPUkRFUiBCWSBzdW0gREVTQzsiX3M7Ci19Ci0KLVZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJz
dFBhcnR5PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21h
aW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4pIGNvbnN0Ci17
Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRB
bGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRBbGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5R
dWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7
Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGlyZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFp
bklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IHRoaXJkUGFydHlEYXRhRm9y
U3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBh
cnR5RG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3Ry
YWJsZURvbWFpblN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQobV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpKTsKLSAgICAgICAgdGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zLmFwcGVuZElmTm90Q29udGFpbnMoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eSB7IGZpcnN0UGFydHlEb21haW4sIGhhc1N0b3JhZ2VBY2Nlc3MoZmlyc3RQYXJ0eURvbWFp
biwgdGhpcmRQYXJ0eURvbWFpbiksIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAodGhp
cmRQYXJ0eURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbikgfSk7Ci0gICAgfQotICAgIHJldHVybiB0
aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7Ci19Ci0KLXN0YXRpYyBi
b29sIGhhc0JlZW5UaGlyZFBhcnR5KHVuc2lnbmVkIHRpbWVzVW5kZXJGaXJzdFBhcnR5KQotewot
ICAgIHJldHVybiB0aW1lc1VuZGVyRmlyc3RQYXJ0eSA+IDA7Ci19Ci0KLVZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7
Ci0gICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpB
bGwgPyAiJSIgOiAiMSI7Ci0gICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKTsKLSAgICBpZiAo
IXNvcnRlZFN0YXRpc3RpY3MKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQo
MSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRp
c3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwotICAgIH0KLSAgICB3
aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkpIHsK
LSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy0+
Y29sdW1uSW50KDApOwotICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVnaXN0
cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhn
ZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7Ci0gICAgICAg
ICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5RGF0
YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGlyZFBh
cnR5RG9tYWluKSB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGhpcmRQYXJ0eURh
dGFMaXN0OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJl
Y29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0
aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNp
Z25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4g
UmV0dXJuaW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci0gICAgfQot
ICAgIAotICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIFN0ZFNldDx1bnNpZ25l
ZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3Mp
OwotICAgIGlmICghZmluZFN1YnJlc291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50
KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmNvbHVtbkludCgwKTsKLSAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbklEKTsKLSAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCi0gICAgICAgICAgICBu
ZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Ci0gICAgfQotCi0gICAg
YXV0byBmaW5kVG9wRnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMCJfcyk7Ci0gICAgaWYgKCFmaW5kVG9wRnJhbWVzCi0gICAgICAgIHx8IGZpbmRUb3BGcmFt
ZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Y29sdW1uSW50KDApOwotICAgICAgICBh
dXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQo
bmV3RG9tYWluSUQpOwotICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKLSAgICAgICAg
ICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKLSAgICB9Ci0K
LSAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5
SWRlbnRpZmllZERvbWFpbnMpCi0gICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4o
ZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNp
dmVDYWxscyk7Ci0KLSAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAg
IGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Vi
cmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgIH0KLQotICAgIGF1dG8g
dG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQg
RlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50
RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKLSAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0
ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8dW5zaWduZWQsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsK
LSAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlz
UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAi
X3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7Ci0gICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1u
VGV4dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOwotICAgICAgICAgICAgcmVz
dWx0cy5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBh
dXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOwotCi0g
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAgICAgICAgICAgIGlmICgh
ZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9
IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0g
ICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAg
ICAgICAgICAgIGlmICghZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52
YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5J
bnQoMSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFp
bklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21h
aW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21h
aW5JRCIpKTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVt
ZW50KSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZG9t
YWluSUQpOwotICAgICAgICAgICAgaWYgKCFkb21haW5JRCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQtPmNvbHVtbkludCgxKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQg
SU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikp
OwotICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7Ci0gICAgICAg
ICAgICBpZiAoIWRvbWFpbklEKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwotICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gbm90VmVyeVByZXZhbGVu
dFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7Ci0gICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
IG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNl
KHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwg
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNv
dXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0
aWMucHJldmFsZW5jZSk7Ci0gICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3Rh
dGlzdGljLnByZXZhbGVuY2UpCi0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgbWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKLSAgICByZWNsYXNzaWZ5UmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJ1
bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1l
RG9tYWluJiBzdWJGcmFtZURvbWFpbikgY29uc3QKLXsKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQs
IHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOwotICAgIHJl
dHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFt
ZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4p
OwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAo
Y29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKLSAgICBjYXNl
IENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25D
b29raWVQb2xpY3k6Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4s
IFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29va2llQWNjZXNzOjpP
bmx5SWZHcmFudGVkOgotICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgotICAgICAgICBicmVhazsK
LSAgICB9OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
c3RvcmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQs
IHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVI
YW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBw
YWdlSUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3Rp
Y3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7Ci0gICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoY29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURv
bWFpbikpIHsKLSAgICBjYXNlIENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oSVRQRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIg
UFJJVkFURV9MT0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlv
biBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltJVFBdIENhbm5v
dCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwg
Iicgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
X3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNz
U3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OgotICAgICAgICBpZiAoVU5MSUtFTFko
ZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkg
c3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBmcm9tIHNldHRpbmcgY29va2llcy4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZl
bDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgc2luY2UgaXRzIGNvb2tpZXMg
YXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVu
ZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkgc3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBm
cm9tIHNldHRpbmcgY29va2llcy4iX3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRs
ZWQgYmVsb3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGF1dG8gdXNlcldhc1Byb21w
dGVkRWFybGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOwotICAgIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8pIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0
aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBB
Ym91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBh
Y2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVyICciX3MsIHRv
cEZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBvciBub3QuIl9zKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJv
bXB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKElUUERlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJSIgUFJJ
VkFURV9MT0dfU1RSSU5HICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltJVFBdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICciX3MsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLCAiJyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicuIl9z
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRv
bWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCi0gICAgICAg
IHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNl
Y29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29w
ZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKLXsK
LSAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKLSAgICB9Ci0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFp
biYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0
b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmIChwcm9tcHRXYXNTaG93biA9PSBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewotICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVE
b21haW4pOwotICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgewotICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOwotICAgIH0KLQotICAgIGdyYW50
U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21h
aW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVy
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1l
RG9tYWluKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkOjpZZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByb21wdFdhc1No
b3duTm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0g
ICAgICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
LSAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSA9PSBTdG9yYWdlQWNjZXNz
UHJvbXB0V2FzU2hvd246Olllcyk7Ci0jZW5kaWYKLSAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KHN1YkZyYW1lRG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHNjb3BlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVE
b21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHNjb3BlLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RvcmVdKFN0b3JhZ2VBY2Nl
c3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3YXNHcmFudGVkLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlu
cyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLVZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURv
bWFpbnNUb0Jsb2NrOwotICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDIpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7
Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBw
ZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7Ci0KLSAgICBpZiAoIWRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOwotICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
Ci0gICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKLQotICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAl
IiBQUklWQVRFX0xPR19TVFJJTkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIERpZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpLnN0cmluZygpLCAiJyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iX3MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkLCBi
b29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1l
U2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKLSAgICBib29sIGFyZVRhcmdl
dEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47
Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKLSAgICAgICAgYXV0byB0YXJn
ZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
YXJnZXREb21haW4pOwotICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKLSAgICAg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBkb21haW4iLCB0
aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVMYXN0
U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwot
ICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7Ci0gICAgICAgIGlmIChpc01haW5G
cmFtZSkgewotICAgICAgICAgICAgYm9vbCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gIXdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyICYmIGRl
bGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQgPCBwYXJhbWV0ZXJzKCkubWluRGVsYXlBZnRl
ck1haW5GcmFtZURvY3VtZW50TG9hZFRvTm90QmVBUmVkaXJlY3Q7Ci0gICAgICAgICAgICBpZiAo
aXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVy
YWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFp
bik7Ci0gICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAgICAgICAg
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9
KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0p
LCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xP
R19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xP
R19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVz
c2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3Ry
aW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9t
YWluLnN0cmluZygpLCAiJy4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKLSAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwotICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAg
ICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dC5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFt
ZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCBvZiB0YXJnZXQgb3IgcmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0
aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQp
OwotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxl
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBO
YXZpZ2F0ZWRUb0RvbWFpbiYgdG9Eb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKGZyb21Eb21haW4gIT0gdG9Eb21haW4pOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odG9Eb21haW4pOwotICAgIGlmICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAg
Ci0gICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCi0gICAgICAgIHNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0K
LSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBX
SEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+
YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVy
YWN0aW9uKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
c2V0VXNlckludGVyYWN0aW9uIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFj
dGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBib29sIGRpZEhhdmVQcmV2
aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJh
dGluZ0RhdGVzV2luZG93OjpMb25nKTsKLSAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0
cnVlLCBXYWxsVGltZTo6bm93KCkpOwotCi0gICAgaWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRVc2VySW50
ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKLQotICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYg
KCFyZW1vdmVTdG9yYWdlQWNjZXNzCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJp
bmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQotICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
Ci0gICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KLSAgICB1cGRhdGVDb29raWVCbG9ja2lu
ZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dp
bmRvdykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSwgImhhc0hhZFVzZXJJbnRlcmFj
dGlvbiJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsKLQotICAgIGlm
IChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpKSB7Ci0gICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgotICAgICAgICAvLyBTZXQgdGltZXN0
YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdwotICAgICAgICAvLyBp
dCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgotICAgICAgICBj
bGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7Ci0gICAgICAgIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
LQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7Ci0gICAg
aWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlIGRvbWFpbklEIHNob3VsZCBleGlzdCBidXQgd2FzIG5vdCBm
b3VuZC4iLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQsIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnksICJzZXRQcmV2YWxlbnRSZXNv
dXJjZSJfcyk7Ci0gICAgaWYgKCFzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dAotICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZEludCgxLCAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQs
IHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2Ug
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlIl9zKTsKLSAgICBpZiAobmV3UHJldmFsZW5jZSA9
PSBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCkgewotICAgICAgICBpZiAoIXNjb3Bl
ZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudAotICAgICAgICAgICAgfHwgc2Nv
cGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7Ci0gICAgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJsZURvbWFpbklELCBu
b25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOwotICAgIHNldERvbWFpbnNBc1ByZXZh
bGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxl
bnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoZG9t
YWlucyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmIChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7Ci0gICAgICAgIG1fZGF0
YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRl
bWVudCwgZ2V0QWxsRG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gZG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50
LT5jb2x1bW5UZXh0KDApKTsKLSAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5z
LmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6
XG5cbiIpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgcmVzb3Vy
Y2VUb1N0cmluZyhyZXN1bHQsIGRvbWFpbik7Ci0KLSAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0g
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOwotICAgICAg
ICBmb3IgKGF1dG8gdGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOwotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQudG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlJiBwcmVkaWNhdGVTdGF0ZW1lbnQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoIXByZWRpY2F0ZVN0YXRlbWVudAotICAgICAgICB8fCBwcmVkaWNhdGVT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgaXNQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJuIHByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzVmVyeVByZXZhbGVu
dFJlc291cmNlUXVlcnksICJpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlz
dHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAi
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIl9zKTsKLSAgICByZXR1cm4gcmVsYXRpb25z
aGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0
b3BGcmFtZURvbWFpbik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOwotICAgIHJldHVybiBy
ZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSwgImlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyJfcyk7Ci0gICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhzY29wZWRTdGF0ZW1lbnQs
IGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFs
ZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGF1dG8gc2NvcGVk
U3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSJfcyk7Ci0gICAgCi0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZh
bHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFu
c2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlR3Jh
bmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0R3JhbmRm
YXRoZXJlZCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbiwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxRdWVyeSwgInNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi1TZWNvbmRzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4p
OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5J
RCh0b3BGcmFtZURvbWFpbik7Ci0KLSAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZy
YW1lRG9tYWluSUQpCi0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCB9OwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVz
dGFtcFN0YXRlbWVudCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0
TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIs
ICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDYsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLSAgICB9Ci0gICAgaWYgKHNj
b3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLQot
ICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMCkgfTsK
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgaXNHcmFuZGZh
dGhlcmVkUXVlcnksICJpc0dyYW5kZmF0aGVyZWQiX3MpOwotICAgIHJldHVybiBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBt
YWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFt
ZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNv
bmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGb3IgY29uc2lzdGVu
Y3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9w
IGZyYW1lIGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9t
YWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9
KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi1zdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKLSAgICAgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQKLSAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCAwIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9t
YWluKTsKLSAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKG5ld09ic2VydmF0
aW9uKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgc3Rk
OjpudWxsb3B0IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9t
YWluSUQoZG9tYWluKS52YWx1ZSgpIH07Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCi17Ci0gICAgbV9kYXRhYmFz
ZS5jbGVhckFsbFRhYmxlcygpOwotCi0gICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJEYXRhYmFzZUNvbnRlbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKLXsKLSAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4p
OwotICAgIGlmICghZG9tYWluSURUb1JlbW92ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxs
RGF0YVN0YXRlbWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsRG9t
YWlucygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERvbWFp
bnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImFsbERvbWFpbnMiX3MpOwotICAgIGlm
ICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBkb21haW5zOwotICAgIHdoaWxlIChzY29wZWRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBkb21haW5zLmFwcGVuZChSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNjb3BlZFN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotICAgIHJldHVybiBkb21haW5zOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKLSAgICBjbGVhck9w
ZXJhdGluZ0RhdGVzKCk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIHJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLQotICAgIGF1
dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwgeyB9IH07Ci0gICAgdXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcmVB
bGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pCi17Ci0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9
PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAh
aGFzSGFkVXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRv
dzo6TG9uZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1Db29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tp
ZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpOwotICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21haW4uc3RyaW5n
KCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
LQotICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKLSAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKLQotICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OwotCi0gICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKLX0K
LQotU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFy
dHlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZp
cnN0UGFydHlEb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87Ci0gICAgfQot
Ci0gICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gKnJlc3VsdC5zZWNvbmQ7Ci0K
LSAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRv
bWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghc3RhdGVt
ZW50Ci0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOwotCi0gICAgcmV0dXJuICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPyBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93
bjo6Tm87Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAwIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
IHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJf
cyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIAot
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLUhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00g
KFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVs
RG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElO
TkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5k
b21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04g
ZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVt
blRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8gZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yKCk7Ci0gICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBD
b29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOwotICAg
IGF1dG8gZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpOwotICAgIGF1dG8gZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzID0gdGhpcy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7Ci0KLSAg
ICBpZiAoZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbkFzRmlyc3RQYXJ0eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNj
ZXNzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ig
ZG9tYWluc1RvQmxvY2sgeyBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5LCBkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgfTsKLQotICAgIGlmIChkZWJ1Z0xv
Z2dpbmdFbmFibGVkKCkgJiYgKCFkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNF
bXB0eSgpIHx8ICFkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCi0g
ICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFj
a2luZyByZXN0cmljdGlvbnMiLCBkb21haW5zVG9CbG9jayk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VS
ZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxv
Y2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIHN0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkod2Vha1RoaXMtPmRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0
ZSB0cmFja2luZyByZXN0cmljdGlvbnMuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5kZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sICJbSVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tp
bmcgcmVzdHJpY3Rpb25zLiJfcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1WZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpkb21haW5zKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAKLSAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKLSAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdp
c3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRl
cmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQg
Sk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9t
YWluSUQgPSBkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVy
biByZXN1bHRzOwotICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Y29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29s
dW1uVGV4dCgxKSkKLSAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDIpKQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/
IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVt
ZW50LT5jb2x1bW5JbnQoNikpCi0gICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWluSURzVG9DbGVhcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChkb21haW5JRHNU
b0NsZWFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaXN0VG9DbGVh
ciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKLQotICAgIGF1dG8gY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoIWNsZWFyR3JhbmRm
YXRoZXJpbmdTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVW5leHBp
cmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRhdGEmIHJlc291cmNlU3RhdGlz
dGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLXsKLSAgICBp
ZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NF
eHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBv
cGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKLQotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0
aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCi0gICAgICAgIGlmIChvcGVyYXRpbmdE
YXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykKLSAgICAgICAgICAgIGNs
ZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBb
XSB7IH0pOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
b3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1ib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihj
b25zdCBEb21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nKQotewotICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3Rp
Yy5ncmFuZGZhdGhlcmVkKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiBy
ZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKQotewot
ICAgIGJvb2wgaXNSZW1vdmFsRW5hYmxlZCA9IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlKCkgIT0gRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmUgfHwgcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKLSAgICBi
b29sIGlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkID0gc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkOwotCi0gICAgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cgd2luZG93IHsgfTsKLSAgICBzd2l0Y2ggKGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKCkpIHsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOgotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOgotICAgICAgICB3aW5kb3cgPSBPcGVyYXRp
bmdEYXRlc1dpbmRvdzo6U2hvcnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXNMaXZlT25UZXN0aW5nVGltZW91
dDoKLSAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rp
bmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXNSZXByb1Rlc3RpbmdUaW1lb3V0OgotICAgICAgICB3aW5kb3cg
PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yUmVwcm9UZXN0aW5nOwotICAgIH0KLQotICAgIHJl
dHVybiBpc1JlbW92YWxFbmFibGVkICYmICFpc1Jlc291cmNlR3JhbmRmYXRoZXJlZCAmJiAhaGFz
SGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCB3aW5k
b3cpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91
bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKLXsKLSAgICBpZiAoKCFpc1NhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0
cmljdEZvclNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWlu
KSkKLSAgICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VT
dGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChyZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0
c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKLSAgICAgICAgY2xlYXJUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3Rh
dGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0aWMpCi17Ci0gICAgaWYgKHN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiBz
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7Ci19Ci0KLVJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RX
ZWJzaXRlRGF0YUZvcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKCkgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcp
Ci0gICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwotCi0gICAgYXV0
byBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgYXV0byBvbGRlc3RVc2VySW50ZXJhY3Rpb24g
PSBub3c7Ci0gICAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgdG9EZWxldGVPclJlc3RyaWN0Rm9yOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBWZWN0b3I8RG9tYWluRGF0
YT4gZG9tYWlucyA9IHRoaXMtPmRvbWFpbnMoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFp
bklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IGRv
bWFpbnMpIHsKLSAgICAgICAgaWYgKHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9u
KHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB0aGlzLT5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZShzdGF0aXN0aWMpKQotICAgICAgICAgICAgb2xkZXN0
VXNlckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0VXNlckludGVyYWN0aW9uLCAqbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsV2Vi
c2l0ZURhdGFGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewot
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENvb2tp
ZXNGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgICAgICB0
b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURh
dGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihzdGF0aXN0
aWMsIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgdG9E
ZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgICAg
IHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKLSAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0Vu
YWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIlNjaGVkdWxlZCAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHRvIGhhdmUgaXRzIGNvb2tpZXMg
c2V0IHRvIFNhbWVTaXRlPXN0cmljdC4iLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5m
bywgbWFrZVN0cmluZygiU2NoZWR1bGVkICciLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4u
c3RyaW5nKCksICInIHRvIGhhdmUgaXRzIGNvb2tpZXMgc2V0IHRvIFNhbWVTaXRlPXN0cmljdCcu
IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkKLSAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZy5hcHBlbmQoc3Rh
dGlzdGljLmRvbWFpbklEKTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0
aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUg
d2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93
IC0gb2xkZXN0VXNlckludGVyYWN0aW9uIDwgcGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCkKLSAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNsZWFyKCk7Ci0KLSAgICBjbGVh
ckdyYW5kZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSAwOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5
LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgIGNvdW50ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCk7Ci0KLSAgICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRy
aWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50
cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOwotCi0gICAg
c2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJp
ZXNEb3duVG87Ci0gICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwotCi0gICAgYXV0byByZWNv
cmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2
YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwotICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwg
cmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAg
ICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBl
bnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7Ci0KLSAg
ICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKLQotICAgIGF1
dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRhdGVM
YXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVt
ZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldExhc3RTZWVuIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB1
cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNl
Y29uZHMoKSkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAo
ZG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFByZXZhbGVudFJl
c291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCwgdXBk
YXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnksICJ1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQotewot
ICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChj
b3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwotICAgIAotICAgIGlmICghc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJp
bmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5j
b2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Y29sdW1u
SW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Y29sdW1uSW50KDAp
ID09IDEpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKLXsKLSAgICBidWlsZGVyLmFw
cGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlllcyIgOiAiTm8iKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0
cmluZyYgZW50cnkpCi17Ci0gICAgYnVpbGRlci5hcHBlbmQoIiAgICAgICAgIiwgZW50cnksICdc
bicpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURT
dGF0ZW1lbnQsIGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQuIFN0
YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgIHJlc3VsdCA9IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50LT5jb2x1bW5U
ZXh0KDApOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFTQ0lJTGl0ZXJhbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAotewotICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiAiU0VM
RUNUIHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKLSAg
ICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKLSAgICBpZiAodGFibGVOYW1l
ID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gIlNFTEVD
VCBmcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9E
b21haW5JRCA9ID8iX3M7Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGly
ZFBhcnR5U2NyaXB0cyIpCi0gICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWlu
SUQgZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9t
YWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMiKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20g
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJf
czsKLSAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IikKLSAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCi0g
ICAgICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJs
ZU5hbWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCi0gICAgICAgIHJldHVy
biAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKLSAgICAKLSAgICByZXR1cm4gIiJf
czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5k
U3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgYXV0byBxdWVyeSA9
IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5hbWUpOwotICAgIAotICAgIGlmICghcXVl
cnkubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIGRhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwotICAgIAotICAgIGlmICghZGF0YSB8fCBk
YXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxl
ZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChkYXRhLT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKCIgICAgIiwgdGFibGVOYW1lLCAiOlxuIik7Ci0gICAgCi0gICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Y29sdW1uSW50KDApKTsKLSAgICBh
cHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKLSAgICAKLSAgICB3aGlsZSAoZGF0YS0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEKGRhdGEtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgIGFwcGVuZE5leHRFbnRy
eShidWlsZGVyLCByZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaGFzSGFkUmVjZW50
VXNlckludGVyYWN0aW9uKFdURjo6U2Vjb25kcyBpbnRlcmFjdGlvblRpbWVTZWNvbmRzKQotewot
ICAgIHJldHVybiBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAy
NF9oOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNv
dXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KSBjb25zdAotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LCBnZXRSZXNvdXJjZURh
dGFCeURvbWFpbk5hbWVRdWVyeSwgInJlc291cmNlVG9TdHJpbmciX3MpOwotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9t
YWluKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNvdXJjZVRvU3Ry
aW5nLiBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwg
ZG9tYWluLCAnXG4nKTsKLSAgICAKLSAgICAvLyBVc2VyIGludGVyYWN0aW9uCi0gICAgYXBwZW5k
Qm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFC
eURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbjogIik7Ci0gICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRl
cmFjdGlvbihTZWNvbmRzKG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIndpdGhpbiAyNCBob3VycyIpOwotICAgIGVsc2UKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIi0xIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYXBw
ZW5kQm9vbGVhbihidWlsZGVyLCAiZ3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlE
b21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7Ci0gICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0KLSAgICAvLyBTdG9yYWdlIGFjY2VzcwotICAgIGFwcGVu
ZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyIsIGRvbWFpbik7Ci0KLSAgICAvLyBUb3AgZnJhbWUgc3RhdHMKLSAgICBhcHBlbmRTdWJT
dGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWlu
KTsKLSAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKLSAgICBh
cHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSIsIGRvbWFpbik7Ci0gICAgYXBwZW5kU3ViU3RhdGlzdGlj
TGlzdChidWlsZGVyLCAiVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7
Ci0KLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNv
bHVtbkludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLQotICAgIC8vIFN1YmZyYW1lIHN0YXRzCi0gICAgYXBw
ZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyIsIGRvbWFpbik7Ci0KLSAgICAvLyBTdWJyZXNvdXJjZSBzdGF0cwotICAgIGFwcGVuZFN1YlN0
YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBk
b21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qo
YnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7Ci0KLSAg
ICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UKLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1By
ZXZhbGVudFJlc291cmNlIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChJc1ByZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBt
X2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYnVpbGRlci5h
cHBlbmQoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21h
aW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKLXsK
LSAgICBhdXRvIHNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQsIGxpbmtEZWNvcmF0
aW9uRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UiX3MpOwotICAgIGF1dG8g
c2NvcGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudCht
X3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQsIHNjcmlwdExvYWRFeGlzdHNRdWVyeSwgImRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZSBsaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCJfcyk7Ci0g
ICAgYXV0byBzY29wZWRTdWJGcmFtZUV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRl
bWVudChtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LCBzdWJGcmFtZUV4aXN0c1F1ZXJ5LCAiZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlIHN1YkZyYW1lRXhpc3RzU3RhdGVtZW50Il9zKTsKLSAgICBh
dXRvIHNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQsIHN1YlJlc291cmNlRXhpc3RzUXVlcnks
ICJkb21haW5JREV4aXN0c0luRGF0YWJhc2Ugc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQiX3Mp
OwotICAgIGF1dG8gc2NvcGVkVW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCwgdW5pcXVlUmVk
aXJlY3RFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSB1bmlxdWVSZWRpcmVj
dEV4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgYXV0byBzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQsIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJ
bkRhdGFiYXNlIG9ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgCi0gICAg
aWYgKCFzY29wZWRMaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2Nv
cGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2NvcGVkU3ViRnJhbWVF
eGlzdHNTdGF0ZW1lbnQKLSAgICAgICAgfHwgIXNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVt
ZW50Ci0gICAgICAgIHx8ICFzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudAotICAg
ICAgICB8fCAhc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Ci0gICAgICAgIHx8
IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50LT5i
aW5kSW50KDIsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zY3JpcHRMb2Fk
RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgbV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+YmluZElu
dCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fc3ViRnJhbWVFeGlzdHNT
dGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBt
X3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+YmluZEludCgy
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fdW5pcXVlUmVkaXJlY3RFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4
aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV91bmlxdWVS
ZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwg
bV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc2NyaXB0TG9hZEV4aXN0
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkg
fHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fb2Jz
ZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycygpCi17Ci0gICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOwotICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKLSAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKLQotICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKLQotICAgIGlmICghZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0
ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRp
bmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOwotCi0gICAgaWYg
KCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGgg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJh
dGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9y
dCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBv
ciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNT
aXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCi0gICAgICAgIG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlmIChnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQo
KSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+Y29sdW1uSW50KDIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRv
IHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAobV9vcGVyYXRpbmdEYXRl
c1NpemUgPiAwKSB7Ci0gICAgICAgIGlmICh0b2RheSA8PSBtX21vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0gICAgaW50IHJvd3NUb1By
dW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAx
OwotICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKLSAgICAgICAgYXV0byBkZWxldGVMZWFzdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERh
eSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1
ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGF1
dG8gaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwg
bW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0
b2RheS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycygpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBzd2l0Y2gg
KG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6
TG9uZzoKLSAgICAgICAgaWYgKG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xv
bmdXaW5kb3dPcGVyYXRpbmdEYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgotICAgICAgICBp
ZiAobV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxU
aW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0
aW5nRGF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOgotICAgICAgICByZXR1
cm4gV2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVy
YXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZzsKLSAgICBjYXNlIE9wZXJhdGluZ0RhdGVz
V2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQg
c3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rp
b24gKG1haW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCi17Ci0gICAgLy8gUG9wdWxhdGUgdGhl
IE9wZXJhdGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmlu
Zy4KLSAgICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKLSAg
ICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSku
dmFsdWUoKTsKLSAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKLSAgICAgICAgYXV0byBk
YXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsKLQotICAgICAgICBhdXRvIGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBP
UiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxF
Q1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0
byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQo
KTsKLSAgICB9Ci0KLSAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3Qg
cmVjZW50IG9mIGFsbCBlbnRyaWVzLgotICAgIGRheXNBZ29JblNlY29uZHMgLT0gU2Vjb25kczo6
ZnJvbUhvdXJzKDI0KS52YWx1ZSgpOwotICAgIGF1dG8gc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21h
aW5TdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudCwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nIl9zKTsKLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRUZXh0KFJlZ2lzdHJhYmxlRG9tYWluSW5kZXgsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kRG91YmxlKExhc3RTZWVuSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgaGFzVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCwgZGF5c0Fnb0lu
U2Vjb25kcykgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KEdyYW5kZmF0aGVyZWRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChJc1ByZXZhbGVudEluZGV4LCBpc1ByZXZhbGVudCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCAwKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCogc3RhdGVtZW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byBzb3VyY2VTaXRlRG9tYWluID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDApKTsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChz
dGF0ZW1lbnQtPmNvbHVtbkludCgxKSk7Ci0gICAgYXV0byBzb3VyY2VJRCA9IHN0YXRlbWVudC0+
Y29sdW1uSW50KDIpOwotICAgIGF1dG8gdGltZU9mQWRDbGljayA9IGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0
YXRlbWVudC0+Y29sdW1uRG91YmxlKDUpIDogc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMyk7Ci0g
ICAgYXV0byB0b2tlbiA9IGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg3KSA6
IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg0KTsKLSAgICBhdXRvIHNpZ25hdHVyZSA9IGF0dHJpYnV0
aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg4KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg1
KTsKLSAgICBhdXRvIGtleUlEID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0
KDkpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDYpOwotCi0gICAgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgYXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZUlEKHNvdXJjZUlEKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzb3VyY2VTaXRlRG9tYWluKSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZShSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGRlc3RpbmF0aW9uU2l0ZURvbWFp
bikpLCB7IH0sIHsgfSwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWVPZkFkQ2xpY2spKTsK
LSAgICAKLSAgICBpZiAoYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRpb25U
cmlnZ2VyRGF0YSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpOwotICAgICAgICBhdXRvIHByaW9y
aXR5ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoNCk7Ci0gICAgICAgIGF1dG8gc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg2KTsKLSAgICAgICAg
YXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMTApOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0x
KQotICAgICAgICAgICAgYXR0cmlidXRpb24uc2V0QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgeyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXR0cmlidXRpb25UcmlnZ2VyRGF0YSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpQcmlvcml0eShwcmlvcml0eSkgfSk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25h
bDxXYWxsVGltZT4gc291cmNlRWFybGllc3RUaW1lVG9TZW5kOwotICAgICAgICBzdGQ6Om9wdGlv
bmFsPFdhbGxUaW1lPiBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZDsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJl
ZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgICAgICBpZiAoc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCi0gICAgICAgICAgICBzb3VyY2VFYXJsaWVzdFRpbWVU
b1NlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
VmFsdWUpOwotCi0gICAgICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVl
ID4gMC4wKQotICAgICAgICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7
Ci0KLSAgICAgICAgYXR0cmlidXRpb24uc2V0VGltZXNUb1NlbmQoeyBzb3VyY2VFYXJsaWVzdFRp
bWVUb1NlbmQsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIH0pOwotICAgIH0KLQotICAg
IGF0dHJpYnV0aW9uLnNldFNvdXJjZVNlY3JldFRva2VuKHsgdG9rZW4sIHNpZ25hdHVyZSwga2V5
SUQgfSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRpb247Ci19Ci0KLXN0ZDo6cGFpcjxzdGQ6Om9w
dGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25h
bDxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNv
cmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25z
dCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlv
blNpdGUmIGRlc3RpbmF0aW9uU2l0ZSkKLXsKLSAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKHNvdXJjZVNpdGUucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVE
b21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBz
dGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmlu
ZFVuYXR0cmlidXRlZFF1ZXJ5LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKLSAg
ICBpZiAoIWZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZFVu
YXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
ZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0ZW1lbnQsIGZp
bmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotICAg
IGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZEF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBmaW5kQXR0
cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50PiB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDsKLSAgICBpZiAo
ZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6VW5hdHRy
aWJ1dGVkKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50PiBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci0gICAgaWYgKGZpbmRB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEZyb21EYXRhYmFzZShmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50LCBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1
dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3Ry
YWJsZURvbWFpbik7Ci0KLSAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25kIHx8ICFhdHRyaWJ1dGlv
bkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNv
dXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigp
OwotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdn
ZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0cmlidXRp
b24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6IC0xOwotICAgICAgICBh
dXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0
cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkucHJpb3JpdHkgOiAtMTsK
LSAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1l
c1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJpYnV0aW9uLnRpbWVzVG9T
ZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpIDogLTE7Ci0gICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6IC0xOwotCi0gICAgICAg
IC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNs
aWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVw
b3J0IHRpbWVzLgotICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0x
ICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKLQotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50Ci0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmli
dXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0LCBhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg5LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQKLSAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRh
dGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMs
IGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJs
ZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBbGxV
bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQot
ewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0
VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNl
dFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
Il9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
bGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3Rpbmcs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlVW5hdHRy
aWJ1dGVkKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1dGlvbikKLXsKLSAgICBhdXRv
IHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5y
ZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRv
bWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsK
LQotICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5J
RCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50LCByZW1vdmVV
bmF0dHJpYnV0ZWRRdWVyeSwgInJlbW92ZVVuYXR0cmlidXRlZCJfcyk7Ci0KLSAgICBpZiAoIXNj
b3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25h
bDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVD
bGlja01lYXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEmJiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgY2xlYXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxp
bmcgYW4gYXR0cmlidXRpb24uCi0gICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoKTsKLQotICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBh
dHRyaWJ1dGlvbi4iKTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRp
b24uIl9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LQotICAgIGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKLSAgICBhdXRv
IHByaW9yaXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKLQotICAgIGlmIChV
TkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8o
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIs
IGRhdGEsIHByaW9yaXR5KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZv
LCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJp
b3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKLSAgICB9Ci0KLSAgICBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50
aWxTZW5kIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIGF1dG8gYXR0cmli
dXRpb24gPSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRp
b25TaXRlKTsKLSAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24u
Zmlyc3Q7Ci0gICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNv
bmQ7Ci0KLSAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgewotICAgICAgICAvLyBBbHdh
eXMgY29udmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhl
IHVuYXR0cmlidXRlZCBtYXAuCi0gICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNs
eVVuYXR0cmlidXRlZCk7Ci0gICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5h
dHRyaWJ1dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1v
dmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkpOwotCi0gICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgaGF2ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVu
YXR0cmlidXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1
dGlvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LgotICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNl
bmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVy
dGVkIGEgc3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7Ci0gICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBh
dHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJf
cywgcHJpb3JpdHksICInLiJfcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhp
Z2hlciBwcmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCi0gICAgICAgIGlmICgh
cHJldmlvdXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhh
c0hpZ2hlclByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7Ci0gICAgICAgICAg
ICBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRy
aWJ1dGVkKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0
ZWQpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgewot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQs
ICJSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25l
IHdpdGggYXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGlj
fXUgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKLSAg
ICAgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVy
dGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNl
IGl0IGhhZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVz
cGVjdCB0aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKLSAgICAg
ICAgLy8gbm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0
LgotICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNs
eUJlZW5SZXBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBw
cmV2aW91c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRv
U2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKLSAgICAgICAgICAgIGlmICgh
c2Vjb25kc1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgICAgICBpbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKLQotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVk
IGFuIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAle3B1YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdo
ZXIgcHJpb3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3Vy
ZW1lbnRdIFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBw
cmlvcml0eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5o
YXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOwotfQotCi1WZWN0b3I8V2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKQotewotICAgIGF1
dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2Fs
bEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRv
U3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW4pCi17Ci0gICAgLy8g
RGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBpZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgot
ICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUiOwotICAgIGlmIChkb21haW4pIHsKLSAgICAg
ICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21haW5JRCgqZG9tYWluKTsKLSAgICAgICAgaWYg
KCFkb21haW5JRFRvTWF0Y2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYmluZFBh
cmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwotICAgIH0KLQotICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwot
Ci0gICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNs
ZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotCi0gICAgaWYgKCFjbGVhclVuYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFy
YW1ldGVyKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyVW5hdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50U3RhdGVtZW50LCBjbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGJpbmRQYXJh
bWV0ZXIpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
ckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCi17Ci0gICAgYXV0byBleHBpcmF0aW9u
VGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6Om1heEFnZSgpOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQs
IGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGlyZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRpbWVG
cmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1T
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9T
dHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01l
YXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKLXsKLSAgICBhdXRvIHNv
dXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5j
b2x1bW5JbnQoMCkpOwotICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWlu
U3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICBhdXRvIHNv
dXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3VyY2VTaXRlRG9t
YWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9tYWluLCAiXG5T
b3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKLQotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAg
ICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7
Ci0gICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KTsKLSAgICAg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg2KTsKLQot
ICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgewotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3JpdHksICJcbkF0
dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7Ci0gICAgICAgICAgICBpZiAoZWFy
bGllc3RUaW1lVG9TZW5kID09IC0xKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJO
b3Qgc2V0Iik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RUaW1lVG9TZW5k
KSAtIFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoc2Vj
b25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhfaCkgPyAiV2l0
aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuTm8gYXR0cmli
dXRpb24gdHJpZ2dlciBkYXRhLiIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50
VG9TdHJpbmcoKQotewotICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3Rz
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNU
IENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQy
Il9zKTsKLSAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPmNvbHVtbkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzLT5jb2x1bW5JbnQoMSkpCi0gICAgICAgIHJldHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBD
bGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwotCi0gICAgYXV0byB1bmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01l
YXN1cmVtZW50VG9TdHJpbmciX3MpOwotCi0gICAgaWYgKCF1bmF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRUb1N0cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gdW5hdHRyaWJ1dGVkTnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnRzOiI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbics
Ci0gICAgICAgICAgICBhdHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCkpOwotICAgIH0KLQotICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnks
ICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVkTnVtYmVy
ID0gMDsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIiLCAiQXR0cmlidXRl
ZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRyaWJ1dGVkTnVtYmVy
ICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAotICAgICAgICAgICAgYXR0cmlidXRpb25Ub1N0
cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCi1zdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmIGF0dHJpYnV0aW9u
KQotewotICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50LCBlYXJsaWVzdFRp
bWVzVG9TZW5kUXVlcnksICJlYXJsaWVzdFRpbWVzVG9TZW5kIl9zKTsKLQotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291
cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1l
VG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKLSAgICBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uOwotICAgIAotICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBv
cnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgIGlmIChzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKLSAgICAgICAgZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKTsKLSAgICAKLSAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkgPiAwLjApCi0gICAgICAgIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgxKTsKLSAgICAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoU291cmNlRG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVt
ZW50LCBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZSJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2Us
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9u
RG9tYWluSUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCi17Ci0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvblN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwg
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkKLXsgICAgCi0gICAgYXV0byB0
aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwotICAgIGF1dG8g
c291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Ci0gICAgYXV0byBk
ZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29uZDsKLQotICAg
IGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0
ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
ID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21h
aW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0aW9uUmVwb3J0
RW5kcG9pbnQpIHsKLSAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50OjpTb3VyY2U6Ci0gICAgICAgIGlmICghc291cmNlRWFybGllc3RUaW1l
VG9TZW5kKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgc291
cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50
OjpEZXN0aW5hdGlvbjoKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2Vu
ZCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24oKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAg
Ly8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1bmxlc3MgaXQg
aGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXRl
LgotICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVz
dFRpbWVUb1NlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVk
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNs
ZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
c0FzRXhwaXJlZEZvclRlc3RpbmcoKQotewotICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBX
YWxsVGltZTo6bm93KCkgLSAxX2g7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlID0gPyJfcyk7Ci0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uID0gbnVsbCJfcyk7Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5i
aW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1TY29wZUV4aXQ8RnVu
Y3Rpb248dm9pZCgpPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9n
cmVzcygpKQotICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsg
W10geyB9IH0pOwotCi0gICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIHJldHVybiBtYWtl
U2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10gewotICAgICAgICBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOwotICAgIH0gfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
dW5kZWYgSVRQX1JFTEVBU0VfTE9HCi0jdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxMjk4NjgzODcxYzdlYmQzY2E3
OTQ5YjA1OGI0MzgwNTFkZWIxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3Rh
dGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxw
YWwvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU1FMaXRlRGF0YWJhc2U7
Ci1jbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93biA6IGJvb2w7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9v
bDsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGlj
ID0gNTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RhdGlzdGljcyA9IDc7Ci1z
dGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dW5zaWduZWQsIG51bWJlck9mQnVja2V0c1BlclN0
YXRpc3RpYz4gYnVja2V0U2l6ZXMge3sgMSwgMywgMTAsIDUwLCAxMDAgfX07Ci0KLWNsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKLWNsYXNzIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjsKLQotdXNpbmcgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci11c2luZyBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OwotdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpT
b3VyY2VTaXRlOwotdXNpbmcgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUgPSBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGU7Ci11c2lu
ZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGE7Ci11c2luZyBFeGlzdGluZ0NvbHVtbnMgPSBWZWN0
b3I8U3RyaW5nPjsKLXVzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJpbmc+OwotdXNp
bmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwotdXNpbmcgRXhwZWN0ZWRDb2x1bW5OYW1l
ID0gU3RyaW5nOwotdXNpbmcgU291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwotdXNp
bmcgRGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBkb3VibGU7Ci11c2luZyBTb3VyY2VE
b21haW5JRCA9IHVuc2lnbmVkOwotdXNpbmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVk
OwotCi10eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gVGFi
bGVBbmRJbmRleFBhaXI7Ci0KLS8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAv
IGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlz
dGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZp
bmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKCk7Ci0KLSAgICBzdGF0aWMg
SGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSo+JiBhbGxTdG9yZXMo
KTsKLSAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3NpZnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVy
KERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBv
cGVuZXJJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2
b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYpIGZpbmFsOwotICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNH
cmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdy
YW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVsYXlB
ZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5
VXNlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCByZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKLSAgICBTZWNvbmRzIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0Owot
ICAgIGJvb2wgaXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KLSAg
ICB2b2lkIHNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlRmlsZTsgfQotICAgIHZvaWQgcmVtb3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxs
RG9tYWlucygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gY2hlY2tGb3JNaXNzaW5n
VGFibGVzSW5TY2hlbWEoKTsKLSAgICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdE
YXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIGludGVycnVwdCgpOwotCi0gICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KLSAg
ICB2b2lkIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNl
bmREYXRhPiBhdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aW9uYWw8UmVnaXN0cmFibGVEb21haW4+
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmco
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7Ci0KLSAgICB2b2lkIG9wZW5J
VFBEYXRhYmFzZSgpOwotICAgIHZvaWQgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgYm9vbCBtaXNzaW5nVW5pcXVlSW5kaWNlcygpOwotICAgIGJvb2wgbmVlZHNVcGRhdGVkU2No
ZW1hKCk7Ci0gICAgYm9vbCBuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVt
YSgpOwotICAgIHZvaWQgcmVuYW1lQ29sdW1uSW5UYWJsZShTdHJpbmcmJiwgRXhpc3RpbmdDb2x1
bW5OYW1lJiYsIEV4cGVjdGVkQ29sdW1uTmFtZSYmKTsKLSAgICB2b2lkIGFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZShTdHJpbmcmJiwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiwgY29uc3QgRXhwZWN0
ZWRDb2x1bW5zJik7Ci0gICAgdm9pZCBhZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgdm9pZCByZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHJlbmFtZUNvbHVt
bkluVGFibGUoKTsKLSAgICBUYWJsZUFuZEluZGV4UGFpciBjdXJyZW50VGFibGVBbmRJbmRleFF1
ZXJpZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1cGRhdGVQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFNjaGVtYUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBlbmFibGVGb3JlaWduS2V5cygpOwot
ICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWREb21haW5zKCk7Ci0gICAgdm9pZCBt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGRlc3Ryb3lTdGF0
ZW1lbnRzKCk7Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+Jiwg
QVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIGJvb2wgaGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1YkZyYW1lRG9tYWluJikgY29u
c3Q7Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNG
aXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIFN0cmlu
ZyBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQpIGNvbnN0OwotICAgIEFTQ0lJ
TGl0ZXJhbCBnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0OwotICAgIHZvaWQgbWVy
Z2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgbWVy
Z2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpOwotICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7Ci0gICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWdu
ZWQpOwotICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmlyc3REb21haW5JRCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7Ci0gICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGRvbWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlTGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxs
VGltZSk7Ci0gICAgdm9pZCB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBpbnQpOwotICAgIHZvaWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKLSAgICBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tC
dXRLZWVwQ29va2llc0ZvcigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKSBjb25zdDsKLSAgICBIYXNo
TWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
KFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEKTsKLSAgICB2b2lkIG1hcmtSZXBv
cnRBc1NlbnRUb1NvdXJjZShTb3VyY2VEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCk7Ci0g
ICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IGVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLQotICAgIHN0
cnVjdCBEb21haW5EYXRhIHsKLSAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7Ci0gICAgICAgIFJl
Z2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOwotICAgICAgICBXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b247Ci0gICAgICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKLSAgICAgICAgYm9vbCBpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOwotICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OwotICAgIH07Ci0g
ICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMoKSBjb25zdDsKLSAgICBib29sIGhhc0hhZFVu
ZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihjb25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5n
RGF0ZXNXaW5kb3cpOwotICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWdu
ZWQ+JiYpOwotICAgIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBoYXNVc2Vy
R3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRD
b3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKLSAgICBzdHJ1Y3QgTm90VmVyeVByZXZh
bGVudFJlc291cmNlcyB7Ci0gICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluOwotICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVuY2U7Ci0gICAgICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKLSAgICAgICAg
dW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50OwotICAgICAgICB1bnNp
Z25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7Ci0KLSAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdDsKLQotICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICBDb29raWVBY2Nlc3MgY29va2llQWNj
ZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLQot
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFy
eURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJj
ZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwotICAgIHZvaWQgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
V2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQoKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7
IE5vLCBZZXMgfTsKLSAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBib29sIHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcpOwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2ll
c0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KTsKLSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwg
Ym9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICBSZWdpc3RyYWJsZURvbWFp
bnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0Rl
bGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEYXRh
YmFzZVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBjcmVh
dGVVbmlxdWVJbmRpY2VzKCk7Ci0gICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKLSAgICBTdHJpbmcg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZShjb25zdCBEb21haW5EYXRhJik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0
ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLSAgICBXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFi
YXNlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25UeXBlKTsKLSAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7
Ci0gICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dD4+IGZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOwotCi0gICAgU2NvcGVFeGl0
PEZ1bmN0aW9uPHZvaWQoKT4+IFdBUk5fVU5VU0VEX1JFVFVSTiBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwot
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBtdXRh
YmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9t
YWluQ291bnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFRvcExldmVsRG9tYWluU3Rh
dGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3Rh
dGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
dXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVu
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0
ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRl
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1l
bnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RvbWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRl
bWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc0V4aXN0c1N0
YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YkZy
YW1lRXhpc3RzU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudDsKLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4
cGlyZWRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhckV4cGlyZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25zU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZmluZFVu
YXR0cmlidXRlZFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RU
aW1lVG9TZW5kU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNl
U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQ7Ci0KLSAgICBQQUw6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX29wZXJhdGluZ0RhdGVz
U2l6ZSB7IDAgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGU7Ci0gICAgc3RkOjpvcHRpb25hbDxPcGVyYXRpbmdEYXRlPiBtX3Nob3J0
V2luZG93T3BlcmF0aW5nRGF0ZTsKLSAgICBPcGVyYXRpbmdEYXRlIG1fbW9zdFJlY2VudE9wZXJh
dGluZ0RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0YWJhc2VTdG9yZSgpOyB9Ci1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNzdlMDk4MGFlYTNkMjY1YTE2YTE4NTI0YjQ3ZWVjYmNiYjNjNjk3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0KLSNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3MgS2V5ZWRFbmNv
ZGVyOwotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwotZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7Ci1zdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFRoaXMgaXMgYWx3
YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBTdXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QpOwotCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNv
bnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFVuaXF1ZVJlZjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPj4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcDsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4g
Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJv
bURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlz
dGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
Y29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5hbDsKLSAgICBib29sIGlzUHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEdyYW5kZmF0
aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKLSAg
ICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWlu
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBj
b25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhcmVBbGxUaGlyZFBh
cnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwot
ICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jh
Z2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVz
KT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21h
aW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29s
IGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQsIGJv
b2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgbG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9t
YWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsK
LSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IE9wZXJhdGluZ0RhdGVzV2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
bW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1Vz
ZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLQotICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBJVFAgbWVtb3J5IHN0b3JlLgotICAg
IHZvaWQgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpIG92
ZXJyaWRlIHsgfTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZSB7IH07Ci0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRz
VW50aWxTZW5kRGF0YT5hdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYp
IG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICB2b2lkIGNsZWFyUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoc3RkOjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4pIG92ZXJyaWRlIHsgfTsKLSAg
ICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGUgeyB9
OwotICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH07Ci0gICAgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkgb3ZlcnJpZGUgeyB9OwotICAgIHZv
aWQgbWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nKCkgb3ZlcnJpZGUgeyB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNP
cGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKSBvdmVycmlkZTsKLSAgICBjb25zdCBWZWN0b3I8T3Bl
cmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdE
YXRlczsgfQotICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIG92ZXJyaWRlIHsgbV9vcGVy
YXRpbmdEYXRlcy5jbGVhcigpOyB9Ci0gICAgdm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYmKTsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7Ci0g
ICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+JiYgbmV3RGF0ZXMpOwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHN0YXRpYyBib29sIHNob3VsZEJs
b2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBz
dGF0aWMgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVk
U3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNl
bnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBjb25zdDsKLSAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcp
IGNvbnN0OwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSBjb25zdDsK
LSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwotICAgIHVuc2lnbmVk
IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9Eb21haW4+
JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9pZCBncmFu
dFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6
OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wg
aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92
ZXJyaWRlOwotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAg
UmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgcmVnaXN0
cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKSBvdmVycmlkZTsK
LSAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgSGFzaE1hcDxSZWdpc3RyYWJs
ZURvbWFpbiwgVW5pcXVlUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+PiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKQotICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
c3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzTWVtb3J5U3RvcmUoKTsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKaW5kZXggZWJlMjM1MzY1NGUwOWEyMjE1ODdiMjU3YWVlNjg3NmVjZjUzMTZl
Mi4uYWE0YjQxMWNjMjcwNDMzMzcyNDg2YjE5ZTViZmIwYjBjYmIwZjgzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTI5LDEwNSArMjksMzEzNiBA
QAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZUphci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBl
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwg
eyA1X3MgfTsKKyNkZWZpbmUgSVRQX1JFTEVBU0VfTE9HKHNlc3Npb25JRCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6IiBm
bXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIElUUF9SRUxFQVNFX0xPR19FUlJPUihz
ZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCisv
LyBDT1VOVCBRdWVyaWVzCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkg
PSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1
dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Citjb25zdGV4cHIgYXV0byBjb3VudFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRv
RG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50UHJldmFsZW50UmVzb3VyY2Vz
UXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDE7Il9zOworY29uc3RleHByIGF1dG8g
Y291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNU
IENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDE7Il9zOworCitj
b25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1QgcmVnaXN0cmFibGVEb21haW4pIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0
aW9uID0gMDsiX3M7CisKKy8vIElOU0VSVCBPUiBJR05PUkUgUXVlcmllcworY29uc3RleHByIGF1
dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFp
bnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAg
ICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFs
ZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
K2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8g
VG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5J
RCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IChzb3VyY2VEb21haW5JRCwgdG9E
b21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJl
Z2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRv
bWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICgg
Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5
ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRz
ICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7
Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJy
ZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKKworLy8gSU5T
RVJUIE9SIFJFUExBQ0UgUXVlcmllcworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIGludG8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9t
YWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyB3aGVyZSBy
ZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0VXBkYXRlZCwgZnJvbURvbWFpbklEKSBT
RUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gaW4gKCAiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFpbklELCBsYXN0VXBkYXRlZCwgdG9wRnJh
bWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3VyY2VEb21haW5JRCwgbGFzdFVwZGF0ZWQs
IHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgorICAgICJzb3VyY2VJRCwgdGltZU9m
QWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQpIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPykiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCwgIgorICAgICJzb3VyY2VJRCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSwgcHJpb3JpdHks
IHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0
dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKKworLy8gRVhJU1RTIFF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNF
TEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCB0b3BGcmFtZURvbWFpbklEID0g
KFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291cmNlRG9tYWluSUQg
PSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RT
IChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7
Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9
ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCBz
dWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN0b3Jh
Z2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExl
dmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworCisvLyBVUERBVEUgUXVlcmllcworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiX3MKKyAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwor
Y29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5
ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVWZXJ5UHJldmFsZW50
UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ZlcnlQcmV2YWxl
bnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNs
ZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQREFURSBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGljayA9IC0xLjAiX3M7Citjb25zdGV4cHIg
YXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51
bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25R
dWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCBXSEVSRSBzb3VyY2VTaXRlRG9tYWlu
SUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7CisKKy8vIFNFTEVDVCBR
dWVyaWVzCitjb25zdGV4cHIgYXV0byBkb21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1Qg
ZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5nRnJvbURvbWFpbklEUXVlcnkgPSAiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
ID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxF
Q1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9
ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1
ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFY
KGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURv
bWFpbklEID0gPyJfcworICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gVG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRvRG9tYWluSUQgPSA/IGFuZCBmcm9tRG9t
YWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBh
bmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCisgICAgIlVOSU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0
ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9t
YWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBnZXRBbGxE
b21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIl9zOworY29uc3RleHByIGF1dG8gZ2V0QWxsU3ViU3RhdGlzdGljc1VuZGVyRG9tYWluUXVl
cnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNU
IHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIHRvRG9t
YWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworY29uc3RleHByIGF1dG8gYWxsQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiU0VMRUNUICosIE1JTihlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgYXMg
bWluVmFsICIKKyAgICAiRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMgTk9UIE5VTEwgQU5EIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNU
ICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFzIG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uIElTIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIElTIE5VTEwgT1JERVIgQlkg
bWluVmFsIl9zOworY29uc3RleHByIGF1dG8gZmluZFVuYXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVD
VCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNl
U2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOworY29u
c3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFO
RCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBlYXJsaWVz
dFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEID0gPyJfczsKKworLy8gRVhJU1RTIGZvciB0ZXN0aW5nIHF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5J
RCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBzY3JpcHRMb2Fk
RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWluSUQgPSA/IE9SIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkg
PSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJf
czsKK2NvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNU
UyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0
ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIG9ic2Vy
dmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPykiX3M7CisKKy8vIERFTEVURSBRdWVyaWVz
Citjb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVlcnkgPSAiREVMRVRFIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNsZWFyVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQg
TElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIExJS0UgPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgTElLRSA/Il9zOworY29u
c3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJE
RUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSA/ID4g
dGltZU9mQWRDbGljayJfczsKK2NvbnN0ZXhwciBhdXRvIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5
ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJF
IHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJf
czsKKworY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxF
IE9ic2VydmVkRG9tYWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBy
ZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBs
YXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBn
cmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRz
UmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCwiCisgICAgImlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7
CisKK2VudW0geworICAgIERvbWFpbklESW5kZXgsCisgICAgUmVnaXN0cmFibGVEb21haW5JbmRl
eCwKKyAgICBMYXN0U2VlbkluZGV4LAorICAgIEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LAorICAg
IE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsCisgICAgR3JhbmRmYXRoZXJlZElu
ZGV4LAorICAgIElzUHJldmFsZW50SW5kZXgsCisgICAgSXNWZXJ5UHJldmFsZW50SW5kZXgsCisg
ICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAorICAgIElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleAorfTsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxE
b21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKCIKKyAgICAidG9wTGV2ZWxE
b21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlH
TiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlu
cyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8g
Y3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04gS0VZKGRvbWFpbklE
KSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUs
ICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZl
ZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291cmNlRG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZ
KHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNF
UyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29u
c3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAoIgorICAgICJzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9S
RUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OworCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAi
Q1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJ0YXJnZXRE
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
IgorICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKSJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIK
KyAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWSh0
b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZFUkVOQ0VTIE9i
c2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4
cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzID0gIkNSRUFURSBU
QUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICgiCisgICAgInRvcEZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
bGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWluSUQgSU5U
RUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhwciBh
dXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCB0b0RvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBj
cmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZP
UkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FT
Q0FERSkiX3M7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFU
RSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgorICAgICJ5ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1v
bnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElOVEVHRVIgTk9UIE5VTEwpIl9zOworCitj
b25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9
ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAg
ICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAg
ICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0b2tlbiBURVhULCBzaWduYXR1cmUgVEVY
VCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNlU2l0ZURvbWFpbklEKSAiCisgICAgIlJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9S
RUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgorICAgICJPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29uc3RleHBy
IGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBU
QUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAgICAic291cmNlU2l0
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBwcmlvcml0eSBJTlRFR0VSIE5PVCBOVUxM
LCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIKKyAgICAiZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVBTCwgIgorICAgICJGT1JFSUdOIEtFWShz
b3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJF
RkVSRU5DRVMgIgorICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKKworLy8gQ1JFQVRFIFVOSVFVRSBJTkRFWCBRdWVyaWVzLgorY29uc3RleHByIGF1
dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFpbklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEICkiX3M7Citjb25z
dGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
ICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudF9zb3VyY2VEb21h
aW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCApIl9zOworY29u
c3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20g
PSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWluSUQgb24gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCApIl9zOworY29uc3RleHBy
IGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20g
KCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c190b3BG
cmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQgb24gVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1YnJlc291cmNlRG9tYWluSUQgKSJfczsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1lRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJyZXNvdXJjZURvbWFpbklEX3RvcEZyYW1l
RG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YnJlc291cmNl
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVU5JUVVFIElO
REVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb19zdWJyZXNvdXJj
ZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1
YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3Vi
cmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEICkiX3M7Citjb25zdGV4
cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBVTklRVUUg
SU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRlc195ZWFyX21vbnRoX21vbnRoRGF5IG9u
IE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1vbnRoRGF5ICkiX3M7Citjb25zdGV4cHIg
YXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWluSURfZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9t
YWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Citjb25zdGV4cHIgYXV0byBjcmVh
dGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUg
VU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlvblNpdGVEb21haW5JRCBvbiBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEICkiX3M7CisKKy8vIEFkZCBvbmUgdG8gdGhlIGNvdW50IG9mIHRoZSBh
Ym92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFi
bGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJl
Y2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgorY29uc3QgaW50IGV4cGVjdGVkSW5kZXhDb3VudCA9
IDE0OworCitzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEo
KQoreworICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERvbWFpbjsKK30KIAotc3RhdGljIFN0cmlu
ZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKK3N0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVy
bmF0ZSgpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9tYWluc1wiIChkb21h
aW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxM
IFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2Vy
SW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZh
bGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
ZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCxpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5VTEwpIl9zOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQorc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRV
bmF0dHJpYnV0ZWRDb2x1bW5zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJ0aW1lT2ZBZENs
aWNrIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcyB9KTsKKyAgICByZXR1
cm4gY29sdW1ucy5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhw
ZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucygpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywgImVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJr
ZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CisgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzTmV3Q3JlYXRlVGFibGVT
Y2hlbWEoY29uc3QgU3RyaW5nJiBzY2hlbWEpCit7CisgICAgcmV0dXJuIHNjaGVtYS5jb250YWlu
cygiUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMiKTsKK30KKworc3RhdGljIFN0cmluZyBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY29uc3QgY2hhciogb3JpZ2luYWxRdWVyeSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKG9yaWdpbmFsUXVlcnkpLnJlcGxhY2UoIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyIsICJDUkVBVEUgVU5JUVVFIElOREVYIik7Cit9CisKK3N0
YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBUYWJsZUFuZEluZGV4UGFpcj4mIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKQorewor
ICAgIHN0YXRpYyBhdXRvIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VGFibGVBbmRJbmRleFBhaXI+IHsKKyAgICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBzdGQ6
Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlT2JzZXJ2ZWRE
b21haW4sIHN0ZDo6bnVsbG9wdCkgfSwKKyAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBz
dGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wTGV2
ZWxEb21haW5zLCBzdGQ6Om51bGxvcHQpIH0sCisgICAgICAgIHsgIlN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4+KGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJ
bmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
KGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hT
dG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB9
LAorICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudCkpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbSwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAg
eyAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUxvYWRlZFRo
aXJkUGFydHlTY3JpcHRzIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgc3RyaXBJbmRl
eFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cykpIH0sCisgICAgICAgIHsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+Pihj
cmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4UXVlcnlUb01hdGNo
U3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KSkgfSwKKyAgICAgICAgeyAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1
ZShjcmVhdGVVbmlxdWVJbmRleFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9LAor
ICAgICAgICB7ICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIl9zLCBzdGQ6Om1ha2VfcGFp
cjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykpIH0sCisgICAgICAgIHsgIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAgeyAiT3BlcmF0aW5nRGF0ZXMi
X3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVP
cGVyYXRpbmdEYXRlcywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVu
aXF1ZUluZGV4T3BlcmF0aW5nRGF0ZXMpKSB9LAorICAgICAgICB7ICJVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+KGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBz
dHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIH0sCisgICAgICAgIHsgIkF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4+KGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4QXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfQorICAgIH0pOworICAgIAorICAgIHJldHVy
biBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5
cGUmIHZhbHVlcykKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWlu
c1RvRGVsZXRlQWxsQ29va2llc0ZvcikKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5p
c0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgZGF0YSkiKTsKLSAg
ICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNvb2tpZXNGb3IpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCBkb21haW4uc3RyaW5n
KCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0
ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWls
ZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQgY29v
a2llcykiKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGljX3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVj
bHR5cGUodmFsdWUpPj4pCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1w
dHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyIn
KTsKKyAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotT3BlcmF0aW5n
RGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKK0hhc2hTZXQ8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4mIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWxsU3RvcmVzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1ZSwgU2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwgbV9zaG91bGRJbmNs
dWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhvc3QpCisgICAgLCBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlRGlyZWN0b3J5UGF0aCwgIm9ic2VydmF0aW9ucy5k
YiJfcykpCisgICAgLCBtX3RyYW5zYWN0aW9uKG1fZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nhcnko
KTsKKyAgICBlbmFibGVGb3JlaWduS2V5cygpOworCisgICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5n
IGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkgYmUgY2Fs
bGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1Zh
Y3V1bSgpKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7CisgICAgYWxsU3RvcmVzKCkuYWRkKHRoaXMpOworfQorCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIGNsb3Nl
KCk7CisgICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xvc2UoKQoreworICAgIGRlc3Ryb3lTdGF0ZW1lbnRzKCk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgp
Cit7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fc3RvcmFnZURpcmVjdG9yeVBh
dGgpKSB7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVj
dG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VGaWxlID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1
c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUpIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
CitzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBtaXNzaW5nVGFibGVzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
IGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZm9yIChh
dXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMg
bWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorICAgIGlmIChtaXNzaW5nVGFibGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBtaXNz
aW5nVGFibGVzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxl
Rm9yZWlnbktleXMoKQoreworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAgaWYg
KCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlw
ZSA9ICd0YWJsZSciX3MpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0
byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Y29sdW1u
VGV4dCgwKTsKKworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PT8gQU5EIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7CisgICAg
aWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsK
KyAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpbmRleCA9IHJh
d0luZGV4OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPj4oV1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRl
eCkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWEoKQoreworICAgIGF1dG8gY3VycmVudFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50Il9zKS5maXJzdDsKKworICAgIGlmICghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkg
JiYgY3VycmVudFNjaGVtYSAhPSBjcmVhdGVBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQorewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYg
KHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNv
dW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWRE
b21haW5zKCkKK3sKKyAgICAvLyBDaGVjayBhIHRhYmxlIGZvciBhIHJlZmVyZW5jZSB0byBUb3BM
ZXZlbERvbWFpbnMsIGEgc2lnbiBvZiB0aGUgb2xkIHNjaGVtYS4KKyAgICBhdXRvIG9sZFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byJfcykuZmlyc3Q7CisgICAgcmV0dXJuIG5lZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEob2xkU2No
ZW1hKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om5lZWRzVXBkYXRl
ZFNjaGVtYSgpCit7CisgICAgLy8gVGhlcmUgYXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBv
dGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUgdG8gdXBncmFkZXMuCisgICAgLy8gQWxsIG90aGVy
IHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRo
ZXkgYXJlIGNvcnJlY3QuCisgICAgaWYgKG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlz
c2luZ1VuaXF1ZUluZGljZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBVTlVTRURfUEFSQU0odGFibGUpOworICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0
KHRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRXhwZWN0
ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRl
bWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCit7Cisg
ICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIikKKyAgICAgICAg
cmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRl
ZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBfU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBH
Uk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEIl9zKTsKKworICAgIGlm
ICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJl
dHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVw
ZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZST00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7
CisKKyAgICBpZiAodGFibGUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQorICAg
ICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxh
c3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9NIF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQiX3MpOworCisgICAgaWYg
KHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWlu
SUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQs
IGZyb21Eb21haW5JRCJfcyk7CisKKyAgICBpZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNF
TEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJ
RCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWlu
SUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zKTsKKworICAgIGlmICh0YWJsZSA9PSAiQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9m
QWRDbGljayksIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBr
ZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAgQlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5h
dGlvblNpdGVEb21haW5JRCJfcyk7CisKKyAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJUIElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJ
TkNUICogRlJPTSBfIiwgdGFibGUpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFu
ZWVkc1VwZGF0ZWRTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBhdXRvIGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1h
a2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpKTsK
KyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjcmVh
dGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0
ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVU
YWJsZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgdGFibGUpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxl
RGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBzY2hlbWEsIGVycm9y
IG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKSk7CisgICAgICAgIGlm
ICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3
VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3Ig
bWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0
YWJsZU5hbWUsICIpIikpOworCisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gY29sdW1uczsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7
CisgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBjb2x1
bW5zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBl
eGlzdGluZ0NvbHVtbnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQor
eworICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5z
aXplKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQg
Q09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5
KCkKK3sKKyAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9ICJVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKKyAgICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRU
YWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworCisgICAg
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgY29sdW1uc0Zv
clRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1u
cygpKTsKKyAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwg
Y29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3RlZEF0dHJpYnV0ZWRD
b2x1bW5zKCkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1l
Q29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4
aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1l
KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAi
LCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCkK
K3sKKyAgICAvLyBBdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgY2FzZS4KKyAg
ICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Il9zOworICAgIGNvbnN0IGF1dG8gb2xkRWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZCJfczsKKyAgICBjb25zdCBhdXRvIG5ld0VhcmxpZXN0
VGltZVRvU2VuZENvbHVtbiA9ICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSJfczsKKyAgICBj
b25zdCBhdXRvIG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiYXR0cmlidXRlT25T
aXRlRG9tYWluSUQiX3M7CisgICAgY29uc3QgYXV0byBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
Q29sdW1uID0gImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zOworICAgIGNvbnN0IGF1dG8gZm91
bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zID0gY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJs
ZU5hbWUpOworCisgICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhv
bGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4pKQorICAgICAgICByZW5hbWVDb2x1bW5JblRhYmxl
KGF0dHJpYnV0ZWRUYWJsZU5hbWUsIG9sZEVhcmxpZXN0VGltZVRvU2VuZENvbHVtbiwgbmV3RWFy
bGllc3RUaW1lVG9TZW5kQ29sdW1uKTsKKworICAgIGlmIChmb3VuZEF0dHJpYnV0ZWRUYWJsZUNv
bHVtbnMuY29udGFpbnMob2xkQXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbikpCisgICAgICAg
IHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRpb25E
ZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7CisKKyAg
ICAvLyBVbmF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgorICAgIGF1
dG8gdW5hdHRyaWJ1dGVkVGFibGVOYW1lID0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50Il9zOworICAgIGF1dG8gZm91bmRVbmF0dHJpYnV0ZWRUYWJsZUNvbHVtbnMgPSBjb2x1
bW5zRm9yVGFibGUodW5hdHRyaWJ1dGVkVGFibGVOYW1lKTsKKworICAgIGlmIChmb3VuZFVuYXR0
cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uKSkKKyAgICAgICAgcmVuYW1lQ29sdW1uSW5UYWJsZSh1bmF0dHJpYnV0ZWRUYWJsZU5hbWUs
IG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4sIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRp
b25Db2x1bW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIG1pc3NpbmdUYWJsZXMgPSBjaGVj
a0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOworICAgIGlmICghbWlzc2luZ1RhYmxlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiB0YWJsZSA6ICptaXNzaW5nVGFibGVzKSB7
CisgICAgICAgIGF1dG8gY3JlYXRlVGFibGVRdWVyeSA9IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1
ZXJpZXMoKS5nZXQodGFibGUpLmZpcnN0OworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmRTbG93KGNyZWF0ZVRhYmxlUXVlcnkpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNz
aW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgfQorCisgICAg
aWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nVGFi
bGVzIGZhaWxlZCB0byBjcmVhdGUgdW5pcXVlIGluZGljZXMsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBvcGVuSVRQRGF0YWJhc2UoKTsKKyAgICBhZGRNaXNzaW5nVGFibGVz
SWZOZWNlc3NhcnkoKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0
YWJsZS4KKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdP
YnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVt
YSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJsZS4iKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUg
aXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxlLgorICAgICAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAg
ICAgICAgICAgIG9wZW5JVFBEYXRhYmFzZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsK
KyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKKworICAgIC8v
IElmIHRoZSBPYnNlcnZlZERvbWFpbnMgc2NoZW1hIGluIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIGRpcmVjdG9yeSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1hLCBkZWxldGUgdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgLy8gRklYTUU6IE1pZ3JhdGUgb2xkIE9ic2VydmVkRG9tYWlucyBkYXRh
IHRvIG5ldyB0YWJsZSBzY2hlbWEuCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIG9w
ZW5JVFBEYXRhYmFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVuYW1p
bmcgYW5kIGFkZGluZyBjb2x1bW5zIHNob3VsZCBiZSBkb25lIGJlZm9yZSBtaWdyYXRpbmcgdG8g
YXZvaWQgbWlzbWF0Y2hlZCBvciBtaXNzaW5nIGNvbHVtbnMuCisgICAgcmVuYW1lQ29sdW1uc0lm
TmVjZXNzYXJ5KCk7CisgICAgYWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpOworICAgIG1p
Z3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOworfQorCitTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjb3BlZFN0YXRlbWVu
dChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBB
U0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAoreworICAg
IGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dE9yRXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5n
LmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0
ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnRlcnJ1cHQoKQoreworICAgIGlmIChtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICBtX2RhdGFiYXNlLmludGVycnVwdCgpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERv
bWFpbkNvdW50UXVlcnksICJpc0VtcHR5Il9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNFbXB0eSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuICFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZVVuaXF1ZUluZGljZXMoKQoreworICAgIGlmICgh
bV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICB8
fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpCisgICAgICAgIHx8
ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSkKKyAgICAgICAgfHwg
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAg
IHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
KQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eE9wZXJhdGluZ0RhdGVzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleEF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVVbmlx
dWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZU9i
c2VydmVkRG9tYWluKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRv
cExldmVsRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRv
cExldmVsRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNy
ZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlT3BlcmF0aW5nRGF0ZXMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBPcGVyYXRpbmdEYXRlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZUF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY3Jl
YXRlVW5pcXVlSW5kaWNlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlc3Ryb3lTdGF0
ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
ID0gbnVsbHB0cjsKKyAgICBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fdXBkYXRlVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2lzVmVyeVByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3RvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9nZXRSZXNvdXJj
ZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAg
ICBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxscHRyOwor
ICAgIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckV4cGlyZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9hbGxVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9hbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9maW5kQXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV91cGRhdGVBdHRy
aWJ1dGlvbnNFYXJsaWVzdFRpbWVUb1NlbmRTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX21hcmtSZXBvcnRBc1Nl
bnRUb1NvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9tYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9lYXJsaWVzdFRpbWVzVG9TZW5k
U3RhdGVtZW50ID0gbnVsbHB0cjsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxv
YWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGRvbWFpbklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBkb21h
aW5zIG5vdCBpbiB0aGUgZGF0YWJhc2UuIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQs
IGluc2VydE9ic2VydmVkRG9tYWluUXVlcnksICJpbnNlcnRPYnNlcnZlZERvbWFpbiJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
VGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4LCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZERvdWJsZShMYXN0U2VlbkluZGV4LCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZERvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBsb2FkU3Rh
dGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJ
bnQoR3JhbmRmYXRoZXJlZEluZGV4LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KElzUHJldmFsZW50
SW5kZXgsIGxvYWRTdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgs
IGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbElu
ZGV4LCBsb2FkU3RhdGlzdGljcy5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJj
ZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRPYnNlcnZlZERv
bWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2NvcGVk
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0
aW9uc2hpcEV4aXN0cyhTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYgc3RhdGVtZW50LCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdAoreworICAgIGlmICghZmlyc3REb21haW5JRCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEs
ICpmaXJzdERvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWxhdGlvbnNoaXBFeGlzdHMgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiAhIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnks
ICJkb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWluTGlzdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChhdXRvJiB0b3BGcmFtZVJlc291cmNlIDogZG9tYWluTGlzdCkgeworICAgICAgICAv
LyBJbnNlcnQgcXVlcnkgd2lsbCBmYWlsIGlmIHRvcCBmcmFtZSBkb21haW4gaXMgbm90IGFscmVh
ZHkgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGlmIChlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZVJlc291cmNlKS5zZWNvbmQpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB0b3BG
cmFtZVJlc291cmNlLnN0cmluZygpLCAnIicpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQor
eworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgCisgICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKKyAg
ICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBXYWxs
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluc2VydFJl
bGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJl
Z2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbik7CisgICAgCisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWlu
SUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0
YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklE
LnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBs
b2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJs
ZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVn
aXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlw
dHMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQs
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFu
c2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGN1cnJlbnRSZWdpc3RyYWJsZURvbWFp
biA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCk7CisgICAgYXV0
byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5Eb3VibGUoTGFzdFNlZW5JbmRleCk7
CisgICAgYXV0byBjdXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGN1cnJlbnQtPmNv
bHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4KTsKKyAgICBib29s
IGN1cnJlbnRHcmFuZGZhdGhlcmVkID0gY3VycmVudC0+Y29sdW1uSW50KEdyYW5kZmF0aGVyZWRJ
bmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1bW5JbnQo
SXNQcmV2YWxlbnRJbmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNWZXJ5UHJldmFsZW50ID0gY3Vy
cmVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KTsKKyAgICB1bnNpZ25lZCBjdXJy
ZW50RGF0YVJlY29yZHNSZW1vdmVkID0gY3VycmVudC0+Y29sdW1uSW50KERhdGFSZWNvcmRzUmVt
b3ZlZEluZGV4KTsKKyAgICBib29sIGN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsID0gY3VycmVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxJbmRleCk7CisKKyAgICBBU1NFUlQoY3VycmVudFJlZ2lzdHJhYmxlRG9tYWlu
ID09IG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGlmIChXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoY3VycmVudExhc3RTZWVuKSA8IG90aGVyLmxhc3RTZWVuKQorICAg
ICAgICB1cGRhdGVMYXN0U2VlbihvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIubGFzdFNl
ZW4pOworCisgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8g
SWYgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB0aW1lIGhhcyBiZWVuIHJlc2V0IGRvIHNv
IGhlcmUgdG9vLgorICAgICAgICBpZiAoIW90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKQorICAgICAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBmYWxzZSwgeyB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlLCBzdGQ6Om1heChXYWxsVGltZTo6ZnJvbVJh
d1NlY29uZHMoY3VycmVudE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBvdGhlci5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkpOworCisgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQg
JiYgIWN1cnJlbnRHcmFuZGZhdGhlcmVkKQorICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVy
LnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKKyAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNv
dXJjZSAmJiAhY3VycmVudElzUHJldmFsZW50KQorICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVu
dFJlc291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQorICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgIGlmIChvdGhlci5k
YXRhUmVjb3Jkc1JlbW92ZWQgPiBjdXJyZW50RGF0YVJlY29yZHNSZW1vdmVkKQorICAgICAgICB1
cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQob3RoZXIucmVnaXN0cmFibGVEb21haW4sIG90aGVyLmRh
dGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgaWYgKG90aGVyLmdvdExpbmtEZWNvcmF0aW9uRnJvbVBy
ZXZhbGVudFJlc291cmNlICYmICFjdXJyZW50SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBzdGF0aXN0aWMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJl
c291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5O
YW1lUXVlcnksICJtZXJnZVN0YXRpc3RpYyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJn
ZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMgbm90IGZv
dW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3Rh
dGlzdGljKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3Rh
dGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3MpIHsKKyAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9t
YWluKHN0YXRpc3RpYyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY3MgaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFp
bGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXJnZVN0YXRpc3RpYyhzdGF0aXN0aWMpOworICAg
IH0KKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcy4KKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKK30KKworc3RhdGljIEFT
Q0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKQoreworICAgIHJldHVybiAi
U0VMRUNUIGRvbWFpbklELCIKKyAgICAgICAgIihjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSAr
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lICsgY291bnRVbmlxdWVSZWRpcmVjdFRvKSBh
cyBzdW0gICIKKyAgICAgICAgIkZST00gKCAiCisgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAg
ICAgImRvbWFpbklELCAiCisgICAgICAgICAgICAiQ09VTlQoRElTVElOQ1QgZi50b3BGcmFtZURv
bWFpbklEKSBhcyBjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSwgIgorICAgICAgICAgICAgIkNP
VU5UKERJU1RJTkNUIHIudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJSZXNvdXJjZVVuZGVy
VG9wRnJhbWUsICIKKyAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCB0b0RvbWFpbklEKSBhcyBj
b3VudFVuaXF1ZVJlZGlyZWN0VG8gIgorICAgICAgICAiRlJPTSAiCisgICAgICAgICJPYnNlcnZl
ZERvbWFpbnMgbyAiCisgICAgICAgICJMRUZUIEpPSU4gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyBmIE9OIG8uZG9tYWluSUQgPSBmLnN1YkZyYW1lRG9tYWluSUQgIgorICAgICAgICAiTEVG
VCBKT0lOIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgciBPTiBvLmRvbWFpbklEID0g
ci5zdWJyZXNvdXJjZURvbWFpbklEICIKKyAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvIHUgT04gby5kb21haW5JRCA9IHUuc3VicmVzb3VyY2VEb21haW5JRCAi
CisgICAgICAgICJXSEVSRSBpc1ByZXZhbGVudCBMSUtFID8gIgorICAgICAgICAiYW5kIGhhZFVz
ZXJJbnRlcmFjdGlvbiBMSUtFID8gIgorICAgICAgICAiR1JPVVAgQlkgZG9tYWluSUQpIE9SREVS
IEJZIHN1bSBERVNDOyJfczsKK30KKworVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRoaXJkUGFydHlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRBbGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRB
bGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5RdWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3Bl
Y2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGly
ZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4sIGVycm9yIG1lc3Nh
Z2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5
PiB0aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7CisgICAgd2hpbGUg
KHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbiA9IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudC0+Y29sdW1uSW50KDApKSk7Cisg
ICAgICAgIHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucy5hcHBlbmRJ
Zk5vdENvbnRhaW5zKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHkgeyBmaXJzdFBhcnR5RG9tYWluLCBoYXNTdG9yYWdlQWNj
ZXNzKGZpcnN0UGFydHlEb21haW4sIHRoaXJkUGFydHlEb21haW4pLCBnZXRNb3N0UmVjZW50bHlV
cGRhdGVkVGltZXN0YW1wKHRoaXJkUGFydHlEb21haW4sIGZpcnN0UGFydHlEb21haW4pIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zOworfQorCitzdGF0aWMgYm9vbCBoYXNCZWVuVGhpcmRQYXJ0eSh1bnNpZ25lZCB0aW1lc1Vu
ZGVyRmlyc3RQYXJ0eSkKK3sKKyAgICByZXR1cm4gdGltZXNVbmRlckZpcnN0UGFydHkgPiAwOwor
fQorCitWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFy
dHlEYXRhTGlzdDsKKyAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVy
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3MgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkp
OworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNz
LT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKKyAgICAgICAgfHwg
c29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OworICAgIH0KKyAg
ICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkp
IHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGlj
cy0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7CisgICAg
ICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGly
ZFBhcnR5RG9tYWluKSB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0
eURhdGFMaXN0OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVt
ZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRz
UmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21h
aW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1
bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJl
ZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJIaXQgJXUgcmVj
dXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJuaW5nIGVhcmx5LiIsIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAorICAgICsrbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxsczsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlmaWVkRG9t
YWluczsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJl
c291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLT5j
b2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRS
ZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQo
bmV3RG9tYWluSUQpOworICAgIH0KKworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZy
YW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5jb2x1
bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJl
Y3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRSZXN1
bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3
RG9tYWluSUQpOworICAgIH0KKworICAgIGlmIChuZXdseUlkZW50aWZpZWREb21haW5zLmVtcHR5
KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgZm9yIChh
dXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykKKyAgICAgICAgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0OworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFp
bnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRl
bWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmlu
c2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIH0K
KworICAgIGF1dG8gdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291
cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7
CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAg
ICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
YnVpbGRMaXN0KHByZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQ
cmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitIYXNoTWFwPHVuc2lnbmVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDx1
bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBhdXRvIG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlm
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAg
ICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVt
bkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklE
c09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOworCisgICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmICghZG9tYWluSUQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAo
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1
bW5JbnQoMCkpOworICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
ICghZG9tYWluSUQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAgICBBU1NFUlQoZG9tYWluSUQpOworICAg
ICAgICAgICAgaWYgKCFkb21haW5JRCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFr
ZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKKyAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAoIWRv
bWFpbklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBy
ZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgPSBmaW5kTm90
VmVyeVByZXZhbGVudFJlc291cmNlcygpOworICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9
IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA6IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNraXAocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gY2xh
c3NpZmllcigpLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5z
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpOworICAg
ICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQor
ICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNG
b3JEZWJ1Z01vZGUoKTsKKyAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZh
bGVudCgpOworICAgIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRh
bFZhY3V1bUNvbW1hbmQoKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBj
b25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBz
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdG9yYWdlQWNjZXNzRXhp
c3RzU3RhdGVtZW50LCBzdG9yYWdlQWNjZXNzRXhpc3RzUXVlcnksICJoYXNTdG9yYWdlQWNjZXNz
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9t
YWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIg
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURv
bWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0
dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAoY29v
a2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICBjYXNlIENv
b2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29r
aWVQb2xpY3k6CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtl
UmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4sIFtz
dG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9v
bCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVl
dWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llQWNjZXNzOjpPbmx5
SWZHcmFudGVkOgorICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgorICAgICAgICBicmVhazsKKyAg
ICB9OworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3Rv
cmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBh
Z2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5k
bGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdl
SUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NR
dWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
cyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZy
YW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlE
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgIGlm
ICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0
U3RvcmFnZUFjY2VzcyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChj
b29raWVBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSkgeworICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpDYW5ub3RSZXF1ZXN0OgorICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdM
b2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcg
IiBzaW5jZSBpdHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBh
bmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIs
IHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVi
dWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiW0lUUF0gQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNj
ZXNzIHRvICciX3MsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBzaW5jZSBpdHMgY29va2ll
cyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNl
aXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiJfcykpOworICAgICAgICB9Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVl
c3RBY2Nlc3MpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2Vk
T25Db29raWVQb2xpY3k6CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVk
KCkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiTm8gbmVlZCB0
byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiBzaW5jZSBp
dHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIE5vdGUg
dGhhdCB0aGUgdW5kZXJseWluZyBjb29raWUgcG9saWN5IG1heSBzdGlsbCBibG9jayB0aGlzIHRo
aXJkLXBhcnR5IGZyb20gc2V0dGluZyBjb29raWVzLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5n
KCJbSVRQXSBObyBuZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICciX3MsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLCAiJyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4g
dGhpcmQtcGFydHkgY29udGV4dHMuIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBjb29raWUgcG9s
aWN5IG1heSBzdGlsbCBibG9jayB0aGlzIHRoaXJkLXBhcnR5IGZyb20gc2V0dGluZyBjb29raWVz
LiJfcykpOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nl
c3NTdGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZUFj
Y2Vzczo6T25seUlmR3JhbnRlZDoKKyAgICAgICAgLy8gSGFuZGxlZCBiZWxvdy4KKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0gaGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJhbWVTdGF0dXMuc2Vjb25k
LCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPT0gU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObykgeworICAgICAgICBpZiAoVU5MSUtFTFkoZGVi
dWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBE
ZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBz
dG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciAlIiBQUklWQVRF
X0xPR19TVFJJTkcgIiBvciBub3QuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIEFib3V0IHRvIGFzayB0aGUgdXNl
ciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKSwgIicgdW5kZXIgJyJfcywgdG9wRnJhbWVEb21haW4uc3RyaW5n
KCksICInIG9yIG5vdC4iX3MpKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPT0gU3RvcmFnZUFj
Y2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9n
Z2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcs
ICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1
bmRlciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQ
RGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gU3RvcmFnZSBhY2Nl
c3Mgd2FzIGdyYW50ZWQgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVy
ICciX3MsIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLCAiJy4iX3MpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAg
ICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFn
ZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUo
c3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlE
LCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29wZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFu
dGVkKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBT
dG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNj
ZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21h
aW4mJiBvcGVuZXJEb21haW4pCit7CisgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcyAhPSBvcGVuZXJEb21haW4pOworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkp
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJh
dGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgdW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAlIiBQUklWQVRFX0xPR19TVFJJTkcg
Iiwgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0
cmluZygiW0lUUF0gU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICciX3MsIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKSwgIicgdW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAn
Il9zLCBvcGVuZXJEb21haW4uc3RyaW5nKCksICInLCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gaW4g
dGhlIG9wZW5lZCB3aW5kb3cuIl9zKSk7CisgICAgfQorCisgICAgZ3JhbnRTdG9yYWdlQWNjZXNz
SW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3ZlKG9w
ZW5lckRvbWFpbiksIHN0ZDo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBTdG9yYWdlQWNjZXNzUHJv
bXB0V2FzU2hvd246Ok5vLCBTdG9yYWdlQWNjZXNzU2NvcGU6OlBlclBhZ2UsIFtdKFN0b3JhZ2VB
Y2Nlc3NXYXNHcmFudGVkKSB7IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4s
IFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlE
LCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9t
cHRXYXNTaG93biwgU3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29w
ZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgaWYgKHByb21wdFdhc1No
b3duID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CisgICAgICAgIGF1dG8g
c3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25k
KSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3Qg
Y29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmly
c3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBpZiAo
IU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9y
Q29tcGF0aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbikpCisgICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlcklu
dGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwor
I2VuZGlmCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
dG9wRnJhbWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOworICAgIH0KKworICAg
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZN
b3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2Nv
cGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWlu
JiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHN0ZDo6
b3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQs
IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9tcHRXYXNTaG93bk5vd09yRWFybGllciwg
U3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VB
Y2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFtZURvbWFpbiA9PSB0b3BGcmFtZURv
bWFpbikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzV2FzR3JhbnRl
ZDo6WWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwcm9tcHRXYXNTaG93
bk5vd09yRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgeworICAg
ICAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Cisg
ICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29y
ZDo6Tm8pOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIGlmICghTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVy
cG9zZXNXaXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1l
RG9tYWluKSkKKyAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJh
bWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CisjZW5kaWYKKyAgICAgICAg
QVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1YkZyYW1l
U3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93bjo6WWVzKTsKKyNlbmRpZgorICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVE
b21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFt
ZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc2NvcGUsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9w
RnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdG9yZV0oU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQgd2FzR3JhbnRlZCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1
ZXVlKCkuZGlzcGF0Y2goW3dhc0dyYW50ZWQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdhc0dyYW50ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3Rv
cmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5y
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhj
b25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRvbWFp
bnMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgIGlmICghcmVzdWx0
LnNlY29uZCkKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21h
aW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGJ1
aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1l
bnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpl
bnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFkZWJ1Z01vZGVFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21h
aW5zVG9CbG9jazsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwor
ICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWls
ZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UiLCB0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdT
dGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKworICAgIGlmICghZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90
IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z01hbnVhbFBy
ZXZhbGVudFJlc291cmNlIiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICB9CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHByaW1hcnlE
b21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpKTsKKworICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAlIiBQUklWQVRFX0xPR19TVFJJ
TkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcg
TW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIERp
ZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLCAiJyBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4i
X3MpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxv
Y2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291
cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVs
YXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRl
ZEJ5VXNlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wg
YXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gdG9w
RnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUg
PSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNNYWluRnJhbWUgJiYgIShhcmVUYXJn
ZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5z
U2FtZVNpdGUpKSB7CisgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJh
bWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQgb2YgdGFyZ2V0IGRvbWFpbiIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAq
dGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRy
dWU7CisgICAgfQorCisgICAgaWYgKCFhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUp
IHsKKyAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBib29sIHdhc05hdmln
YXRlZEFmdGVyU2hvcnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAhd2FzUG90ZW50aWFs
bHlJbml0aWF0ZWRCeVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCA8IHBh
cmFtZXRlcnMoKS5taW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkVG9Ob3RCZUFSZWRp
cmVjdDsKKyAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05hdmlnYXRlZEFmdGVyU2hv
cnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJl
ZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRhcmdldFJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdl
dERvbWFpbik7CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFp
bGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFp
bkZyYW1lKSIsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7
IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
dGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBz
ZXQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3Qg
dG8gJSIgUFVCTElDX0xPR19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgdGFyZ2V0RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBz
b3VyY2VEb21haW4uc3RyaW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0
byAnIiwgdGFyZ2V0RG9tYWluLnN0cmluZygpLCAiJy4iKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOworICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXRE
b21haW4pOworICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVj
dGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQgb2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNSZWRpcmVjdCkiLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQu
c2Vjb25kKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQorICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mIGZyb21Eb21haW4sIGNvbnN0IE5h
dmlnYXRlZFRvRG9tYWluJiB0b0RvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQoZnJvbURvbWFpbiAhPSB0b0RvbWFpbik7CisKKyAgICBhdXRvIHRy
YW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1
dG8gdG9Eb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0b0RvbWFpbik7CisgICAgaWYgKCF0b0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24gd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAgCisgICAgaWYg
KGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCisgICAgICAgIHNldElzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0YXJnZXRS
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOworICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJf
cyk7CisgICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQu
c2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1l
IG1vc3RSZWNlbnRJbnRlcmFjdGlvbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQsIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25RdWVyeSwgInNldFVzZXJJbnRlcmFjdGlvbiJfcyk7CisgICAgaWYgKCFzY29wZWRT
dGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIGhhZFVzZXJJ
bnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+Ymlu
ZERvdWJsZSgyLCBtb3N0UmVjZW50SW50ZXJhY3Rpb24uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgz
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNl
ckludGVyYWN0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYm9vbCBkaWRIYXZlUHJldmlvdXNVc2Vy
SW50ZXJhY3Rpb24gPSBoYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBPcGVyYXRpbmdEYXRl
c1dpbmRvdzo6TG9uZyk7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwgV2Fs
bFRpbWU6Om5vdygpKTsKKworICAgIGlmIChkaWRIYXZlUHJldmlvdXNVc2VySW50ZXJhY3Rpb24p
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB1cGRhdGVDb29raWVCbG9ja2luZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKKworICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXRhcmdldFJlc3VsdC5z
ZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwg
eyB9KTsKKworICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisg
ICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5z
ZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgY29va2llIGJsb2NraW5nIHVuY29u
ZGl0aW9uYWxseSBzaW5jZSBhIGNhbGwgdG8gaGFzSGFkVXNlckludGVyYWN0aW9uKCkKKyAgICAv
LyB0byBjaGVjayB0aGUgcHJldmlvdXMgdXNlciBpbnRlcmFjdGlvbiBzdGF0dXMgY291bGQgY2Fs
bCBjbGVhclVzZXJJbnRlcmFjdGlvbigpLAorICAgIC8vIGJsb3dpbmcgdGhlIGNhbGwgc3RhY2su
CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93
IG9wZXJhdGluZ0RhdGVzV2luZG93KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQsIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
aGFzSGFkVXNlckludGVyYWN0aW9uIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKTsKKyAgICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsK
KworICAgIGlmIChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBz
ZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBT
ZXQgdGltZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdworICAg
ICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgor
ICAgICAgICBjbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7CisgICAgICAgIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gaGFkVXNlckludGVy
YWN0aW9uOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
CisKKyAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChkb21haW4pOworICAg
IGlmICghcmVnaXN0cmFibGVEb21haW5JRCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UgZG9tYWluSUQgc2hvdWxkIGV4aXN0IGJ1dCB3YXMgbm90IGZvdW5kLiIs
IHRoaXMpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8gc2NvcGVkVXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQg
PSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dCwgdXBkYXRlUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgInNldFByZXZhbGVudFJlc291cmNlIl9z
KTsKKyAgICBpZiAoIXNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50CisgICAg
ICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEs
IDEpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzY29wZWRV
cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1l
bnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIHVwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2UgdXBkYXRlVmVyeVByZXZh
bGVudFJlc291cmNlIl9zKTsKKyAgICBpZiAobmV3UHJldmFsZW5jZSA9PSBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpWZXJ5SGlnaCkgeworICAgICAgICBpZiAoIXNjb3BlZFVwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVBy
ZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2Vz
OworICAgIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRv
VGhpc0RvbWFpbigqcmVnaXN0cmFibGVEb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25T
b3VyY2VzLCAwKTsKKyAgICBzZXREb21haW5zQXNQcmV2YWxlbnQoV1RGTW92ZShub25QcmV2YWxl
bnRSZWRpcmVjdGlvblNvdXJjZXMpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYgZG9tYWlucykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9t
YWluSUQgSU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5z
VG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVu
dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKSkgeworICAg
ICAgICBtX2RhdGFSZWNvcmRSZW1vdmFsQ29tcGxldGlvbkhhbmRsZXJzLmFwcGVuZChbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERv
bWFpbnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CisgICAgd2hpbGUgKHNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGRvbWFpbnMuYXBwZW5kKHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSk7CisgICAgc3RkOjpzb3J0KGRvbWFpbnMuYmVnaW4o
KSwgZG9tYWlucy5lbmQoKSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4pOworCisgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgiUmVzb3VyY2UgbG9hZCBz
dGF0aXN0aWNzOlxuXG4iKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCisgICAg
ICAgIHJlc291cmNlVG9TdHJpbmcocmVzdWx0LCBkb21haW4pOworCisgICAgYXV0byB0aGlyZFBh
cnR5RGF0YSA9IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpOworICAgIGlmICghdGhpcmRQYXJ0
eURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuSVRQIERhdGE6XG4i
KTsKKyAgICAgICAgZm9yIChhdXRvIHRoaXJkUGFydHkgOiB0aGlyZFBhcnR5RGF0YSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodGhpcmRQYXJ0eS50b1N0cmluZygpLCAnXG4nKTsKKyAgICB9
CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0LnRvU3RyaW5nKCkpOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4oU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmIHByZWRpY2F0ZVN0YXRlbWVudCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmICghcHJlZGljYXRlU3RhdGVtZW50CisgICAgICAgIHx8IHByZWRpY2F0
ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
ICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2lzUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImlzUHJl
dmFsZW50UmVzb3VyY2UiX3MpOworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihz
Y29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKHNob3VsZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCwgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImlzVmVy
eVByZXZhbGVudFJlc291cmNlIl9zKTsKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21h
aW4oc2NvcGVkU3RhdGVtZW50LCBkb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291
cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZy
YW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQsIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVj
dGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVu
dCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvIl9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3Bl
ZFN0YXRlbWVudCwgZG9tYWluSUQocmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9E
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQsIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UiX3MpOworICAgIAorICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3Bl
ZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIHVwZGF0ZUdy
YW5kZmF0aGVyZWRRdWVyeSwgInNldEdyYW5kZmF0aGVyZWQiX3MpOworICAgIGlmICghc2NvcGVk
U3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCB2YWx1ZSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9t
YWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVJc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsU3RhdGVtZW50LCB1cGRhdGVJc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsUXVlcnksICJzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK1NlY29uZHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4pOworICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5JRCh0b3BGcmFtZURv
bWFpbik7CisKKyAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZyYW1lRG9tYWluSUQp
CisgICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlz
dGluZ1RpbWVzdGFtcCB9OworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+
c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVu
dCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICp0b3BGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDYsICp0b3BGcmFt
ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gU2Vjb25kcyB7IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5vRXhp
c3RpbmdUaW1lc3RhbXAgIH07CisgICAgfQorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU2Vjb25kcyB7IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6Ok5vRXhpc3RpbmdUaW1lc3RhbXAgIH07CisKKyAgICByZXR1cm4gU2Vjb25kcyB7
IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDApIH07Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faXNHcmFu
ZGZhdGhlcmVkU3RhdGVtZW50LCBpc0dyYW5kZmF0aGVyZWRRdWVyeSwgImlzR3JhbmRmYXRoZXJl
ZCJfcyk7CisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVu
dCwgZG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVE
b21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJl
Z2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Cisg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNl
cnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZvciBj
b25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9y
IHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworICAgIGlmICghcmVzdWx0
LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGb3IgY29uc2lzdGVuY3ks
IG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZy
YW1lIGRvbWFpbi4KKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0
b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2Ug
YWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwg
KnJlc3VsdC5zZWNvbmQpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
IHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4p
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVz
b3VyY2VEb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20gd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0
YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNv
bmQpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29u
c3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2Fj
dGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiBy
ZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwor
CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBo
YXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0
LnNlY29uZCk7Cit9CisKK3N0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OkFk
ZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgeworICAgICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNj
b3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9t
U3RyaW5nUXVlcnksICJlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
biJfcyk7CisgICAgICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIDAg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHNjb3BlZFN0YXRl
bWVudC0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5v
LCBkb21haW5JRCB9OworICAgICAgICB9CisgICAgfQorCisgICAgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyBuZXdPYnNlcnZhdGlvbihkb21haW4pOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0T2Jz
ZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24pOworCisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IEFkZGVk
UmVjb3JkOjpObywgc3RkOjpudWxsb3B0IH07CisgICAgfQorCisgICAgcmV0dXJuIHsgQWRkZWRS
ZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKS52YWx1ZSgpIH07Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMoKQoreworICAgIG1f
ZGF0YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKKworICAgIGlmICghY3JlYXRlU2NoZW1hKCkpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiwgZGF0YWJhc2UgcGF0aDogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikK
K3sKKyAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4pOworICAgIGlm
ICghZG9tYWluSURUb1JlbW92ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxsRGF0YVN0YXRl
bWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJfcyk7CisgICAg
aWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
bW92ZURhdGFGb3JEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphbGxEb21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRlbWVudCwgZ2V0QWxsRG9tYWlu
c1F1ZXJ5LCAiYWxsRG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnM7
CisgICAgd2hpbGUgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIGRvbWFpbnMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7
CisgICAgcmV0dXJuIGRvbWFpbnM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBjbGVhckRhdGFiYXNl
Q29udGVudHMoKTsKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CisKKyAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKworICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERl
bGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsK
KyAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7
IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwg
eyB9IH07CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2Nr
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6YXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29uc3QgVG9w
RnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIGlmICh0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICh0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
KCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsT25TaXRlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24gJiYgIWhhc0hhZFVzZXJJbnRlcmFjdGlvbih0b3BGcmFtZURvbWFpbiwgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworQ29va2llQWNjZXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y29va2llQWNjZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7CisgICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
KworICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKKworICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OworCisgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKK30K
KworU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCByZXF1
ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihmaXJzdFBhcnR5
RG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0Vf
TE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQgd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm4g
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKyAgICB9CisKKyAgICBhdXRvIGZpcnN0
UGFydHlQcmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKKworICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFORCB0
b3BMZXZlbERvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CisKKyAg
ICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKK30KKworVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFp
bnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1
bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2
YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LT5jb2x1bW5UZXh0KDApKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpk
b21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0
czsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFs
ZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRl
bWVudC0+Y29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1ZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3Vs
dHM7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDAp
KSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworSGFzaE1hcDxUb3BGcmFtZURvbWFpbiwg
U3ViUmVzb3VyY2VEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9t
YWluIEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBz
LnRvcExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBhcyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMg
V0hFUkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERv
bWFpbnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVE
b21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciA9IHRoaXMtPmRvbWFpbnNUb0Js
b2NrQW5kRGVsZXRlQ29va2llc0ZvcigpOworICAgIGF1dG8gZG9tYWluc1RvQmxvY2tCdXRLZWVw
Q29va2llc0ZvciA9IHRoaXMtPmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IoKTsKKyAg
ICBhdXRvIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5ID0gdGhpcy0+ZG9t
YWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKTsKKyAgICBhdXRvIGRvbWFpbnNX
aXRoU3RvcmFnZUFjY2VzcyA9IHRoaXMtPmRvbWFpbnNXaXRoU3RvcmFnZUFjY2VzcygpOworCisg
ICAgaWYgKGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc0VtcHR5KCkgJiYgZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkuaXNFbXB0eSgpICYmIGRvbWFpbnNXaXRoU3RvcmFnZUFj
Y2Vzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tDb29raWVzRm9y
IGRvbWFpbnNUb0Jsb2NrIHsgZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLCBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLCBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFz
Rmlyc3RQYXJ0eSwgZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzIH07CisKKyAgICBpZiAoZGVidWdM
b2dnaW5nRW5hYmxlZCgpICYmICghZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlz
RW1wdHkoKSB8fCAhZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkpKQor
ICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoIkFwcGx5aW5nIGNyb3NzLXNpdGUgdHJh
Y2tpbmcgcmVzdHJpY3Rpb25zIiwgZG9tYWluc1RvQmxvY2spOworCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtl
UmVmKHN0b3JlKCkpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9C
bG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Js
b2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCBzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUo
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHdlYWtUaGlzLT5kZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJEb25lIGFwcGx5aW5nIGNyb3NzLXNp
dGUgdHJhY2tpbmcgcmVzdHJpY3Rpb25zLiIpOworICAgICAgICAgICAgICAgICAgICB3ZWFrVGhp
cy0+ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1Zywg
TWVzc2FnZUxldmVsOjpJbmZvLCAiW0lUUF0gRG9uZSBhcHBseWluZyBjcm9zcy1zaXRlIHRyYWNr
aW5nIHJlc3RyaWN0aW9ucy4iX3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6RG9tYWluRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBW
ZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRm
YXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRv
cEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNv
dXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdS
T1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5J
RCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAg
IAorICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Y29sdW1u
SW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC0+Y29sdW1uRG91
YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCgzKSA/IHRydWUgOiBm
YWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KSA/IHRydWUgOiBmYWxz
ZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQor
ICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5jb2x1bW5JbnQo
NikpCisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVj
dG9yPHVuc2lnbmVkPiYmIGRvbWFpbklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoZG9tYWluSURz
VG9DbGVhcik7CisKKyAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9D
bGVhciwgIikiKSk7CisgICAgaWYgKCFjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJHcmFu
ZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRh
dGEmIHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRl
c1dpbmRvdykKK3sKKyAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9u
ICYmIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lLCBvcGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKKworICAgICAgICAvLyBE
cm9wIHByaXZhY3kgc2Vuc2l0aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAg
ICAgIGlmIChvcGVyYXRpbmdEYXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykKKyAgICAgICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsV2Vic2l0
ZURhdGFGb3IoY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJvb2wgc2hvdWxk
Q2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICByZXR1cm4gaXNQcmV2YWxlbnRSZXNvdXJj
ZShyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikgJiYgIWhhc0hhZFVuZXhwaXJl
ZFJlY2VudFVzZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYywgT3BlcmF0aW5nRGF0ZXNX
aW5kb3c6OkxvbmcpICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhcmVzb3Vy
Y2VTdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxCdXRDb29raWVzRm9yKGNvbnN0IERvbWFpbkRhdGEm
IHJlc291cmNlU3RhdGlzdGljLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpCit7
CisgICAgYm9vbCBpc1JlbW92YWxFbmFibGVkID0gZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUoKSAhPSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZSB8fCByZXNv
dXJjZVN0YXRpc3RpYy5pc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOworICAg
IGJvb2wgaXNSZXNvdXJjZUdyYW5kZmF0aGVyZWQgPSBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nICYmIHJlc291cmNlU3RhdGlzdGljLmdyYW5kZmF0aGVyZWQ7CisKKyAgICBPcGVyYXRpbmdE
YXRlc1dpbmRvdyB3aW5kb3cgeyB9OworICAgIHN3aXRjaCAoZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUoKSkgeworICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM6CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU6CisgICAgICAgIHdpbmRvdyA9IE9wZXJh
dGluZ0RhdGVzV2luZG93OjpTaG9ydDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llc0xpdmVPblRlc3RpbmdUaW1l
b3V0OgorICAgICAgICB3aW5kb3cgPSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yTGl2ZU9uVGVz
dGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6QWxsQnV0Q29va2llc1JlcHJvVGVzdGluZ1RpbWVvdXQ6CisgICAgICAgIHdpbmRv
dyA9IE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JSZXByb1Rlc3Rpbmc7CisgICAgfQorCisgICAg
cmV0dXJuIGlzUmVtb3ZhbEVuYWJsZWQgJiYgIWlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkICYmICFo
YXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMsIHdp
bmRvdyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRFbmZv
cmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJvb2wg
c2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICBpZiAoKCFpc1NhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZv
clNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKKyAg
ICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VTdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChyZXNv
dXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0c0ZvclNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKKyAgICAgICAgY2xlYXJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoY29u
c3QgRG9tYWluRGF0YSYgc3RhdGlzdGljKQoreworICAgIGlmIChzdGF0aXN0aWMubW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDw9IDApCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOworfQorCitSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JH
cmFuZGZhdGhlcmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1l
Ojpub3coKTsKKyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hl
Y2tGb3JHcmFuZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CisK
KyAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAgY2xlYXJFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7CisKKyAgICBhdXRvIG5vdyA9IFdhbGxUaW1lOjpub3co
KTsKKyAgICBhdXRvIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IG5vdzsKKyAgICBSZWdpc3RyYWJs
ZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciB0b0RlbGV0ZU9yUmVzdHJp
Y3RGb3I7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKworICAgIFZlY3RvcjxEb21haW5EYXRhPiBkb21haW5zID0gdGhpcy0+ZG9t
YWlucygpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVy
aW5nOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogZG9tYWlucykgeworICAgICAgICBpZiAo
c2hvdWxkRXhlbXB0RnJvbVdlYnNpdGVEYXRhRGVsZXRpb24oc3RhdGlzdGljLnJlZ2lzdHJhYmxl
RG9tYWluKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYXV0byBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9IHRoaXMtPm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKHN0YXRpc3RpYykpCisgICAgICAgICAgICBvbGRlc3RVc2VySW50ZXJhY3Rpb24gPSBzdGQ6
Om1pbihvbGRlc3RVc2VySW50ZXJhY3Rpb24sICptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSk7CisgICAgICAgIGlmIChzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihzdGF0aXN0aWMs
IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CisgICAgICAgICAgICB0b0RlbGV0ZU9y
UmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsQ29va2llc0Zvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5k
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRSZW1vdmVBbGxCdXRDb29raWVzRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKKyAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJp
Y3RGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9FbmZvcmNlU2FtZVNpdGVT
dHJpY3RGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiU2NoZWR1bGVkICUiIFBVQkxJ
Q19MT0dfU1RSSU5HICIgdG8gaGF2ZSBpdHMgY29va2llcyBzZXQgdG8gU2FtZVNpdGU9c3RyaWN0
LiIsIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJTY2hlZHVs
ZWQgJyIsIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSwgIicgdG8gaGF2ZSBp
dHMgY29va2llcyBzZXQgdG8gU2FtZVNpdGU9c3RyaWN0Jy4iKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQorICAgICAgICAgICAgZG9tYWlu
SURzVG9DbGVhckdyYW5kZmF0aGVyaW5nLmFwcGVuZChzdGF0aXN0aWMuZG9tYWluSUQpOworICAg
IH0KKworICAgIC8vIEdpdmUgdGhlIHVzZXIgZW5vdWdoIHRpbWUgdG8gaW50ZXJhY3Qgd2l0aCB3
ZWJzaXRlcyB1bnRpbCB3ZSByZW1vdmUgbm9uLWNvb2tpZSB3ZWJzaXRlIGRhdGEuCisgICAgaWYg
KCFwYXJhbWV0ZXJzKCkuaXNSdW5uaW5nVGVzdCAmJiBub3cgLSBvbGRlc3RVc2VySW50ZXJhY3Rp
b24gPCBwYXJhbWV0ZXJzKCkubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKQor
ICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2ll
V2Vic2l0ZURhdGFGb3IuY2xlYXIoKTsKKworICAgIGNsZWFyR3JhbmRmYXRoZXJpbmcoV1RGTW92
ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1cm4gdG9E
ZWxldGVPclJlc3RyaWN0Rm9yOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVu
dCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3Mp
OworICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGNvdW50
ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CisKKyAgICBpZiAoY291bnQgPD0gcGFy
YW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4
U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3Vu
dCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKGNvdW50TGVm
dFRvUHJ1bmUpOworCisgICAgYXV0byByZWNvcmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZ
IGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwor
ICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwgcmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291
bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
ZW50cmllc1RvUHJ1bmU7CisgICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5j
b2x1bW5JbnQoMCkpOworCisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChlbnRyaWVz
VG9QcnVuZSk7CisKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CisgICAgaWYgKCFwcnVuZUNvbW1h
bmQgfHwgcHJ1bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRh
dGVMYXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOworICAgIGlmICghc2NvcGVkU3Rh
dGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vl
bi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVu
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVMYXN0U2Vlbihkb21haW4s
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHNob3VsZFNraXAoZG9tYWlu
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9t
YWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgaW50IHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVtZW50LCB1cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRRdWVyeSwgInVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZCJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViZnJhbWVEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBhdXRvIHN1YkZyYW1lVW5k
ZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3ViZnJh
bWVVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5KTsKKyAgICAKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8
ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGlu
ZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHN1
YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZy
YW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURv
bWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8tPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNz
VGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cK
KyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gKHN1YkZyYW1l
VW5kZXJUb3BGcmFtZUNvdW50LT5jb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+Y29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+Y29sdW1uSW50KDApID09IDEpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRCb29s
ZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxh
ZykKK3sKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlll
cyIgOiAiTm8iKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZW50cnkpCit7CisgICAgYnVpbGRlci5hcHBlbmQo
IiAgICAgICAgIiwgZW50cnksICdcbicpOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQgZG9tYWluSUQp
IGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQgPSBlbXB0eVN0cmluZygpOworICAgIAorICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEU3RhdGVtZW50LCBkb21haW5TdHJpbmdGcm9tRG9tYWluSURRdWVyeSwgImdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5J
RC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgcmVzdWx0ID0gbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0ZW1lbnQtPmNv
bHVtblRleHQoMCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQVNDSUlMaXRlcmFs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAoreworICAgIGlmICh0YWJsZU5hbWUgPT0gIlN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJldHVybiAiU0VMRUNU
IHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgZG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZyb20g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7Cisg
ICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKKyAgICAg
ICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09
ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCBm
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21h
aW5JRCA9ID8iX3M7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyIpCisgICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQg
ZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWlu
SUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiKQorICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20gU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJfczsK
KyAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIikK
KyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7Cisg
ICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCisgICAg
ICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5h
bWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCisgICAgICAgIHJldHVybiAi
U0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICAKKyAgICByZXR1cm4gIiJfczsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3Rp
Y0xpc3QoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNv
bnN0IFN0cmluZyYgZG9tYWluKSBjb25zdAoreworICAgIGF1dG8gcXVlcnkgPSBnZXRTdWJTdGF0
aXN0aWNTdGF0ZW1lbnQodGFibGVOYW1lKTsKKyAgICAKKyAgICBpZiAoIXF1ZXJ5Lmxlbmd0aCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBkYXRhID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAKKyAgICBpZiAoIWRhdGEgfHwgZGF0YS0+YmluZElu
dCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qo
ZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cHBlbmRTdWJTdGF0aXN0aWNMaXN0LiBTdGF0ZW1lbnQgZmFpbGVkIHRvIHByZXBhcmUgb3IgYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRhdGEtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRlci5hcHBlbmQoIiAgICAiLCB0YWJs
ZU5hbWUsICI6XG4iKTsKKyAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zy
b21Eb21haW5JRChkYXRhLT5jb2x1bW5JbnQoMCkpOworICAgIGFwcGVuZE5leHRFbnRyeShidWls
ZGVyLCByZXN1bHQpOworICAgIAorICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+
Y29sdW1uSW50KDApKTsKKyAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oV1RG
OjpTZWNvbmRzIGludGVyYWN0aW9uVGltZVNlY29uZHMpCiB7Ci0gICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOwotICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOwotICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
Ci0gICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7Ci0gICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKKyAgICByZXR1cm4gaW50ZXJhY3Rpb25UaW1lU2Vjb25kcyA+IFNlY29uZHMo
MCkgJiYgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBpbnRlcmFjdGlvblRp
bWVTZWNvbmRzIDwgMjRfaDsKIH0KIAotT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2Rh
eSgpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VUb1N0cmluZyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3QKIHsKLSAg
ICByZXR1cm4gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Cisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAicmVzb3VyY2VUb1N0cmluZyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4pICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nLiBTdGF0ZW1lbnQgZmFpbGVk
IHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVp
bGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwgZG9tYWluLCAnXG4nKTsKKyAgICAK
KyAgICAvLyBVc2VyIGludGVyYWN0aW9uCisgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFk
VXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
bjogIik7CisgICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKG1fZ2V0
UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoTW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIndp
dGhpbiAyNCBob3VycyIpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0xIik7
CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAi
Z3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
CisKKyAgICAvLyBTdG9yYWdlIGFjY2VzcworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVp
bGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIsIGRvbWFpbik7CisKKyAg
ICAvLyBUb3AgZnJhbWUgc3RhdHMKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIs
ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWluKTsKKyAgICBhcHBlbmRTdWJTdGF0
aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0
KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20iLCBkb21haW4pOworICAgIGFw
cGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiVG9wRnJh
bWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7CisKKyAgICBhcHBlbmRCb29sZWFu
KGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIiwgbV9nZXRS
ZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChJc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKKworICAgIC8vIFN1YmZyYW1lIHN0YXRzCisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChi
dWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyIsIGRvbWFpbik7CisKKyAgICAv
LyBTdWJyZXNvdXJjZSBzdGF0cworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwg
IlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBkb21haW4pOworICAgIGFwcGVuZFN1
YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iLCBk
b21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7CisKKyAgICAvLyBQcmV2YWxlbnQgUmVzb3Vy
Y2UKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1ByZXZhbGVudFJlc291cmNlIiwgbV9n
ZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYXBwZW5kQm9vbGVhbihi
dWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9t
YWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KSk7CisgICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIiAgICBkYXRhUmVjb3Jk
c1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1
bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKIH0KIAotU2Vjb25kcyBPcGVyYXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKGludCBkb21haW5JRCkKIHsKLSAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9t
MTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworICAg
IGF1dG8gc2NvcGVkTGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCwgbGlua0RlY29yYXRpb25F
eGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSJfcyk7CisgICAgYXV0byBzY29w
ZWRTY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCwgc2NyaXB0TG9hZEV4aXN0c1F1ZXJ5LCAiZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlIGxpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICBh
dXRvIHNjb3BlZFN1YkZyYW1lRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQsIHN1YkZyYW1lRXhpc3RzUXVlcnksICJkb21haW5J
REV4aXN0c0luRGF0YWJhc2Ugc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIGF1dG8g
c2NvcGVkU3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCwgc3ViUmVzb3VyY2VFeGlzdHNRdWVyeSwgImRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZSBzdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCJfcyk7Cisg
ICAgYXV0byBzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LCB1bmlxdWVSZWRpcmVj
dEV4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlIHVuaXF1ZVJlZGlyZWN0RXhp
c3RzU3RhdGVtZW50Il9zKTsKKyAgICBhdXRvIHNjb3BlZE9ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudCwgb2JzZXJ2ZWREb21haW5zRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0
YWJhc2Ugb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICAKKyAgICBpZiAo
IXNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8ICFzY29wZWRT
Y3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8ICFzY29wZWRTdWJGcmFtZUV4aXN0
c1N0YXRlbWVudAorICAgICAgICB8fCAhc2NvcGVkU3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQK
KyAgICAgICAgfHwgIXNjb3BlZFVuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50CisgICAgICAg
IHx8ICFzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgbV9s
aW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJ
bnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3NjcmlwdExvYWRFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEs
IGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRl
bWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3Vi
UmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
dW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudC0+Ymlu
ZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpk
b21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfUk9XCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0
c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9vYnNlcnZlZERv
bWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIHN0ZXAsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1l
bnQtPmNvbHVtbkludCgwKSB8fCBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKSB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgfHwgbV9zdWJS
ZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fdW5pcXVlUmVkaXJlY3RF
eGlzdHNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudC0+Y29sdW1uSW50KDApOwogfQogCi1ib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9y
PT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKIHsKLSAgICBy
ZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIu
bV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOworICAgIGF1dG8gY291bnRPcGVyYXRp
bmdEYXRlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKKyAgICBhdXRvIGdldE1vc3RSZWNlbnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywg
bW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7CisgICAgYXV0byBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9N
IE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkg
REVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisKKyAgICBpZiAoIWNvdW50T3BlcmF0aW5nRGF0
ZXNTdGF0ZW1lbnQgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycyBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fb3BlcmF0aW5nRGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRl
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApOworCisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJh
dGluZ0RhdGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVk
IHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBP
cGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworCisg
ICAgaWYgKCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7CisgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudCBmYWlsZWQgZHVyaW5nIHRoZSBjYWxsIHRvIHByZXBhcmUoKSB3aXRoIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiIsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRp
bmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkKKyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0Rh
dGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQg
LSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4i
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
c2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29s
dW1uSW50KDIpKTsKKyAgICB9CisKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkKKyAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBlbHNlIHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVw
ZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBU
aGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2xvbmdX
aW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93
U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50
KDIpKTsKKyAgICB9CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8KGNvbnN0IE9w
ZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKIHsKLSAgICByZXR1
cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byB0b2RheSA9IE9wZXJh
dGluZ0RhdGU6OnRvZGF5KCk7CisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplID4gMCkgewor
ICAgICAgICBpZiAodG9kYXkgPD0gbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGludCByb3dzVG9QcnVuZSA9IG1fb3BlcmF0
aW5nRGF0ZXNTaXplIC0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nICsgMTsKKyAgICBpZiAocm93
c1RvUHJ1bmUgPiAwKSB7CisgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3Mp
OworICAgICAgICBpZiAoIWRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAor
ICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5i
aW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRl
SWZOZWNlc3NhcnkgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxl
ZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JF
IElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8s
ID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAg
fHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0b2RheS55ZWFyKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5i
aW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNR
TElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3Bl
cmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVk
IHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwogfQogCi1ib29s
IE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGly
ZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVz
V2luZG93IG9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25zdAogewotICAgIHJldHVybiBzZWNvbmRz
U2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBzd2l0Y2ggKG9wZXJhdGluZ0RhdGVzV2luZG93KSB7
CisgICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZzoKKyAgICAgICAgaWYgKG1fbG9u
Z1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3BlcmF0
aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgorICAgICAgICBpZiAobV9zaG9ydFdpbmRvd09wZXJhdGlu
Z0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9wZXJhdGluZ0RhdGVzV2luZG93
OjpGb3JMaXZlT25UZXN0aW5nOgorICAgICAgICByZXR1cm4gV2FsbFRpbWU6Om5vdygpID4gbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVyYXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9u
VGVzdGluZzsKKyAgICBjYXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElmIHdlIGRvbid0IG1lZXQg
dGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBjaGVjayB0aGUgdXNl
ciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBmb3IgdGVzdGluZyku
CisgICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKSB7
CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBTdXNwZW5kYWJsZVdv
cmtRdWV1ZSYgd29ya1F1ZXVlLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0IHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QpCi0gICAgOiBtX3N0b3JlKHN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1
ZXVlKQotICAgICwgbV9zaG91bGRJbmNsdWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgdW5zaWduZWQg
bnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9v
bCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50
KQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIC8vIFBvcHVsYXRlIHRo
ZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5p
bmcuCisgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMgPSAwOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDw9IG51bWJlck9mT3BlcmF0aW5nRGF5c1Bhc3NlZDsgaSsrKSB7Cisg
ICAgICAgIGRvdWJsZSBkYXlzVG9TdWJ0cmFjdCA9IFNlY29uZHM6OmZyb21Ib3VycygyNCAqIGkp
LnZhbHVlKCk7CisgICAgICAgIGRheXNBZ29JblNlY29uZHMgPSBXYWxsVGltZTo6bm93KCkuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIC0gZGF5c1RvU3VidHJhY3Q7CisgICAgICAgIGF1dG8g
ZGF0ZVRvSW5zZXJ0ID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhkYXlzQWdvSW5TZWNvbmRzKSk7CisKKyAgICAgICAgYXV0byBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
T1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VM
RUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50
KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5yZXNldCgpOworICAg
IH0KKworICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOworCisgICAgLy8gTWFr
ZSBzdXJlIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIGlzIHRoZSBsZWFzdCByZWNlbnQg
b2YgYWxsIGVudHJpZXMuCisgICAgZGF5c0Fnb0luU2Vjb25kcyAtPSBTZWNvbmRzOjpmcm9tSG91
cnMoMjQpLnZhbHVlKCk7CisgICAgYXV0byBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVt
ZW50LCBpbnNlcnRPYnNlcnZlZERvbWFpblF1ZXJ5LCAiaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0Zv
clRlc3RpbmciX3MpOworICAgIGlmIChzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVu
dC0+YmluZFRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTGFzdFNlZW5JbmRleCwgZGF5c0Fnb0luU2Vjb25kcykgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50
KEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LCBoYXNVc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9P
SworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZERv
dWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBkYXlzQWdvSW5TZWNvbmRz
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0
ZW1lbnQtPmJpbmRJbnQoR3JhbmRmYXRoZXJlZEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElz
UHJldmFsZW50SW5kZXgsIGlzUHJldmFsZW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2Nv
cGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50
SW5kZXgsIGZhbHNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIDApICE9
IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVu
dC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25J
bmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUElJbmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3Rh
dGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
c2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGZhaWxl
ZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQogfQogCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQorc3RhdGljIFN0cmluZyBkb21haW5z
VG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKIHsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpKTsKKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi11bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQorc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29u
c3QgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3ImIGRv
bWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcikKIHsKLSAgICB1bnNpZ25lZCBp
bXBvcnRhbmNlID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRhbmNlOwot
ICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAg
aW1wb3J0YW5jZSAtPSAxOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVy
YWN0aW9uKQotICAgICAgICBpbXBvcnRhbmNlIC09IDI7Ci0gICAgcmV0dXJuIGltcG9ydGFuY2U7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENv
b2tpZXNGb3IpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCBkb21haW4uc3RyaW5nKCksICIoYWxsIGRhdGEpIik7CisgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWluc1Rv
RGVsZXRlQWxsQnV0SHR0cE9ubHlDb29raWVzRm9yKQorICAgICAgICBidWlsZGVyLmFwcGVuZChi
dWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQg
SHR0cE9ubHkgY29va2llcykiKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1Jl
bW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvcikKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgYnV0IGNvb2tpZXMpIik7CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2
YWx1ZSkKQEAgLTQ2MiwxOCArMzQ5Myw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKICAgICB9KTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
c3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3Rv
cmFnZUFjY2Vzcyhbc3RvcmUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTU0Miw2ICszNTYxLDUxOCBAQCBib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkRXhlbXB0RnJvbVdlYnNpdGVEYXRhRGVsZXRp
b24oY29uc3QgUmVnaQogICAgIHJldHVybiAhZG9tYWluLmlzRW1wdHkoKSAmJiAoZG9tYWluID09
IG1fc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluIHx8IG1fYXBwQm91bmREb21haW5zLmNvbnRh
aW5zKGRvbWFpbikpOwogfQogCisvLyBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50LgorCitQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmJ1aWxkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRGcm9tRGF0YWJhc2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJp
YnV0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJp
bmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+
Y29sdW1uSW50KDEpKTsKKyAgICBhdXRvIHNvdXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQo
Mik7CisgICAgYXV0byB0aW1lT2ZBZENsaWNrID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVD
bGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoNSkgOiBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgzKTsKKyAgICBhdXRvIHRv
a2VuID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRp
b25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDcpIDogc3RhdGVtZW50
LT5jb2x1bW5UZXh0KDQpOworICAgIGF1dG8gc2lnbmF0dXJlID0gYXR0cmlidXRpb25UeXBlID09
IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3Rh
dGVtZW50LT5jb2x1bW5UZXh0KDgpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDUpOworICAgIGF1
dG8ga2V5SUQgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtblRleHQoOSkgOiBzdGF0
ZW1lbnQtPmNvbHVtblRleHQoNik7CisKKyAgICBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBhdHRy
aWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlSUQoc291cmNl
SUQpLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZShSZWdpc3Ry
YWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNv
dXJjZVNpdGVEb21haW4pKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZGVzdGluYXRpb25TaXRlRG9tYWluKSksIHsgfSwg
eyB9LCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZU9mQWRDbGljaykpOworICAgIAorICAg
IGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlv
blR5cGU6OkF0dHJpYnV0ZWQpIHsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7CisgICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0
ZW1lbnQtPmNvbHVtbkludCg0KTsKKyAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDYpOworICAgICAgICBhdXRvIGRlc3Rp
bmF0aW9uRWFybGllc3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgx
MCk7CisKKyAgICAgICAgaWYgKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgIT0gLTEpCisgICAgICAg
ICAgICBhdHRyaWJ1dGlvbi5zZXRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25UcmlnZ2VyRGF0YSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6
OlByaW9yaXR5KHByaW9yaXR5KSB9KTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1l
PiBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQ7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRp
bWU+IGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kOworICAgICAgICAKKyAgICAgICAgLy8g
QSB2YWx1ZSBvZiAwLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcG9ydCBoYXMgYmVlbiBzZW50IHRv
IHRoZSByZXNwZWN0aXZlIHNpdGUuCisgICAgICAgIGlmIChzb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA+IDAuMCkKKyAgICAgICAgICAgIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7CisK
KyAgICAgICAgaWYgKGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlKTsKKworICAgICAg
ICBhdHRyaWJ1dGlvbi5zZXRUaW1lc1RvU2VuZCh7IHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCwg
ZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfSk7CisgICAgfQorCisgICAgYXR0cmlidXRp
b24uc2V0U291cmNlU2VjcmV0VG9rZW4oeyB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCB9KTsKKwor
ICAgIHJldHVybiBhdHRyaWJ1dGlvbjsKK30KKworc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25zdCBXZWJDb3JlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUmIGRlc3RpbmF0aW9u
U2l0ZSkKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKHNvdXJjZVNp
dGUucmVnaXN0cmFibGVEb21haW4pOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluSUQg
PSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVEb21haW4pOworCisgICAgaWYg
KCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQorICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQpOworCisg
ICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmluZFVuYXR0cmlidXRlZFF1ZXJ5
LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKKyAgICBpZiAoIWZpbmRVbmF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50IGZpbmRVbmF0dHJpYnV0ZWRRdWVyeSwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
YXV0byBmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50LCBmaW5kQXR0cmlidXRlZFF1ZXJ5LCAiZmluZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKKyAgICBpZiAoIWZpbmRBdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50CisgICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBmaW5k
QXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9t
YWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IGZpbmRBdHRyaWJ1dGVkUXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IHVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50OworICAgIGlmIChmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgPSBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKGZpbmRV
bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCksIFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpVbmF0dHJpYnV0ZWQpOworCisgICAgc3RkOjpvcHRpb25hbDxBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDsKKyAgICBpZiAoZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQorICAgICAgICBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
PSBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKGZpbmRBdHRyaWJ1dGVk
U2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZTo6QXR0cmlidXRlZCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9u
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUp
Cit7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisKKyAgICBhdXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVE
b21haW4pOworICAgIGF1dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlv
blNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25k
IHx8ICFhdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8mIHNvdXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVu
bGlua2FibGVUb2tlbigpOworICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKKyAgICAgICAgYXV0byBh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0
YSgpID8gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6
IC0xOworICAgICAgICBhdXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25Ucmln
Z2VyRGF0YSgpID8gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCku
cHJpb3JpdHkgOiAtMTsKKyAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBh
dHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJp
YnV0aW9uLnRpbWVzVG9TZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDogLTE7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25F
YXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlv
bkVhcmxpZXN0VGltZVRvU2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6
IC0xOworCisgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmli
dXRlZCBwcml2YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdp
dGhvdXQgdmFsaWQgcmVwb3J0IHRpbWVzLgorICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RU
aW1lVG9TZW5kICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsK
KworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChp
bnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgICAgIGlm
ICghc3RhdGVtZW50CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJj
ZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJ
RCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0
LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
dGF0ZW1lbnQtPmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5r
YWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCg5LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25h
dHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlv
bkVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlu
c2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgIGlmICghc3RhdGVtZW50CisgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGlu
YXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2Fi
bGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBz
b3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIHNvdXJjZVVu
bGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBl
bXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVl
cnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1hcmtBbGxVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQoreworICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0VW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNldFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJrQWxsVW5hdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nIl9zKTsKKwor
ICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQWxsVW5hdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQoUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQmIGF0dHJpYnV0aW9uKQoreworICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9t
YWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGlu
YXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21haW4pOworCisgICAgaWYgKCFzb3VyY2VTaXRlRG9t
YWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9yZW1v
dmVVbmF0dHJpYnV0ZWRTdGF0ZW1lbnQsIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5LCAicmVtb3Zl
VW5hdHRyaWJ1dGVkIl9zKTsKKworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8
IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlv
blNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVVbmF0
dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmli
dXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
dHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBTb3VyY2VTaXRlJiBzb3VyY2VT
aXRlLCBjb25zdCBBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYgZGVzdGluYXRpb25TaXRlLCBB
dHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkKK3sKKyAgICAv
LyBXZSBzaG91bGQgYWx3YXlzIGNsZWFyIGV4cGlyZWQgY2xpY2tzIGZyb20gdGhlIGRhdGFiYXNl
IGJlZm9yZSBzY2hlZHVsaW5nIGFuIGF0dHJpYnV0aW9uLgorICAgIGNsZWFyRXhwaXJlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KCk7CisKKyAgICBpZiAoIWF0dHJpYnV0aW9uVHJpZ2dlckRhdGEu
aXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAi
R290IGFuIGludmFsaWQgYXR0cmlidXRpb24uIik7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2Fz
dENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBN
ZXNzYWdlTGV2ZWw6OkVycm9yLCAiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIEdvdCBhbiBp
bnZhbGlkIGF0dHJpYnV0aW9uLiJfcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIGRhdGEgPSBhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
LmRhdGE7CisgICAgYXV0byBwcmlvcml0eSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEucHJpb3Jp
dHk7CisKKyAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgeworICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1YmxpY311IGFuZCBwcmlvcml0
eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7CisgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1l
c3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRd
IEdvdCBhbiBhdHRyaWJ1dGlvbiB3aXRoIGF0dHJpYnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywg
ZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlvcml0eSwgIicuIl9zKSk7CisgICAgfQor
CisgICAgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uU2Vjb25kc1VudGlsU2Vu
ZERhdGEgc2Vjb25kc1VudGlsU2VuZCB7IHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0IH07CisK
KyAgICBhdXRvIGF0dHJpYnV0aW9uID0gZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KHNvdXJj
ZVNpdGUsIGRlc3RpbmF0aW9uU2l0ZSk7CisgICAgYXV0byYgcHJldmlvdXNseVVuYXR0cmlidXRl
ZCA9IGF0dHJpYnV0aW9uLmZpcnN0OworICAgIGF1dG8mIHByZXZpb3VzbHlBdHRyaWJ1dGVkID0g
YXR0cmlidXRpb24uc2Vjb25kOworCisgICAgaWYgKHByZXZpb3VzbHlVbmF0dHJpYnV0ZWQpIHsK
KyAgICAgICAgLy8gQWx3YXlzIGNvbnZlcnQgdGhlIHBlbmRpbmcgYXR0cmlidXRpb24gYW5kIHJl
bW92ZSBpdCBmcm9tIHRoZSB1bmF0dHJpYnV0ZWQgbWFwLgorICAgICAgICByZW1vdmVVbmF0dHJp
YnV0ZWQoKnByZXZpb3VzbHlVbmF0dHJpYnV0ZWQpOworICAgICAgICBzZWNvbmRzVW50aWxTZW5k
ID0gcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0
VGltZVRvU2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKKworICAgICAgICAv
LyBXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSB2YWxpZCBzZWNvbmRzVW50aWxTZW5kIHZhbHVlIGZv
ciBhIHByZXZpb3VzbHlVbmF0dHJpYnV0ZWQgdmFsdWUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbm8g
cHJldmlvdXMgYXR0cmlidXRpb24gd2l0aCBhIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgaWYg
KCFzZWNvbmRzVW50aWxTZW5kLmhhc1ZhbGlkU2Vjb25kc1VudGlsU2VuZFZhbHVlcygpKSB7Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5h
YmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCwgIkNvbnZlcnRlZCBhIHN0b3JlZCBhZCBjbGljayB3aXRoIGF0dHJpYnV0aW9uIHRy
aWdnZXIgZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUuIiwgZGF0YSwg
cHJpb3JpdHkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZvLCBt
YWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gQ29udmVydGVkIGEgc3RvcmVk
IGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBh
bmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIGF0dHJpYnV0aW9uLCBvciB0aGUgbmV3IGF0
dHJpYnV0aW9uIGhhcyBoaWdoZXIgcHJpb3JpdHksIGluc2VydC91cGRhdGUgdGhlIGRhdGFiYXNl
LgorICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkIHx8IHByZXZpb3VzbHlVbmF0dHJp
YnV0ZWQudmFsdWUoKS5oYXNIaWdoZXJQcmlvcml0eVRoYW4oKnByZXZpb3VzbHlBdHRyaWJ1dGVk
KSkgeworICAgICAgICAgICAgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZSgq
cHJldmlvdXNseVVuYXR0cmlidXRlZCksIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRp
b25UeXBlOjpBdHRyaWJ1dGVkKTsKKworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9k
ZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVD
bGlja01lYXN1cmVtZW50LCAiUmVwbGFjZWQgYSBwcmV2aW91c2x5IGNvbnZlcnRlZCBhZCBjbGlj
ayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0aW9uIGRhdGE6ICV7cHVibGljfXUgYW5kIHBy
aW9yaXR5OiAle3B1YmxpY311IGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iLCBkYXRh
LCBwcmlvcml0eSk7CisgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gUmVwbGFjZWQgYSBw
cmV2aW91c2x5IGNvbnZlcnRlZCBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0
aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlv
cml0eSwgIicgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiJfcykpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwcmV2aW91c2x5QXR0cmlidXRlZCkgewor
ICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIG5ldyBhdHRyaWJ1dGlvbiwgcmUtYXR0cmlidXRlIHRo
ZSBvbGQgb25lIHRvIHJlc3BlY3QgdGhlIG5ldyBwcmlvcml0eSwgYnV0IG9ubHkgaWYgdGhpcyBy
ZXBvcnQgaGFzCisgICAgICAgIC8vIG5vdCBiZWVuIHNlbnQgdG8gdGhlIHNvdXJjZSBvciBkZXN0
aW5hdGlvbiBzaXRlIHlldC4KKyAgICAgICAgaWYgKCFwcmV2aW91c2x5QXR0cmlidXRlZC52YWx1
ZSgpLmhhc1ByZXZpb3VzbHlCZWVuUmVwb3J0ZWQoKSkgeworICAgICAgICAgICAgYXV0byBzZWNv
bmRzVW50aWxTZW5kID0gcHJldmlvdXNseUF0dHJpYnV0ZWQudmFsdWUoKS5hdHRyaWJ1dGVBbmRH
ZXRFYXJsaWVzdFRpbWVUb1NlbmQoV1RGTW92ZShhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSk7Cisg
ICAgICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNlbmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5k
VmFsdWVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICAgICAgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZSgqcHJldmlvdXNseUF0
dHJpYnV0ZWQpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCk7CisKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCwgIlJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0
aW9uIHRyaWdnZXIgZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUgYmVj
YXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZS1jb252ZXJ0ZWQgYW4gYWQgY2xpY2sgd2l0aCBhIG5l
dyBvbmUgd2l0aCBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBw
cmlvcml0eTogJyJfcywgcHJpb3JpdHksICInJyBiZWNhdXNlIGl0IGhhZCBoaWdoZXIgcHJpb3Jp
dHkuIl9zKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNl
Y29uZHNVbnRpbFNlbmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc2Vjb25kc1VudGlsU2VuZDsKK30K
KworVmVjdG9yPFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50PiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCit7
CisgICAgYXV0byBhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBhbGxB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgInByaXZhdGVDbGlja01lYXN1
cmVtZW50VG9TdHJpbmciX3MpOworCisgICAgaWYgKCFhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKKyAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOworCisgICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3Rk
OjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluKQoreworICAgIC8vIERlZmF1bHQg
dG8gY2xlYXIgYWxsIGVudHJpZXMgaWYgbm8gZG9tYWluIGlzIHNwZWNpZmllZC4KKyAgICBTdHJp
bmcgYmluZFBhcmFtZXRlciA9ICIlIjsKKyAgICBpZiAoZG9tYWluKSB7CisgICAgICAgIGF1dG8g
ZG9tYWluSURUb01hdGNoID0gZG9tYWluSUQoKmRvbWFpbik7CisgICAgICAgIGlmICghZG9tYWlu
SURUb01hdGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJpbmRQYXJhbWV0ZXIg
PSBTdHJpbmc6Om51bWJlcigqZG9tYWluSURUb01hdGNoKTsKKyAgICB9CisKKyAgICBhdXRvIHRy
YW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1
dG8gY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1l
bnQobV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBj
bGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zKTsKKworICAgIGlmICghY2xlYXJVbmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVh
clVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgYmluZFBhcmFtZXRlcikg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9S
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAg
IGF1dG8gY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGNs
ZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zKTsKKworICAgIGlmICghY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50CisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRl
eHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQo
KQoreworICAgIGF1dG8gZXhwaXJhdGlvblRpbWVGcmFtZSA9IFdhbGxUaW1lOjpub3coKSAtIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjptYXhBZ2UoKTsKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyRXhwaXJlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFF1ZXJ5LCAiY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOworCisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKDEsIGV4cGlyYXRpb25UaW1lRnJhbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRXhwaXJlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmF0dHJp
YnV0aW9uVG9TdHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKK3sKKyAg
ICBhdXRvIHNvdXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0g
Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAg
ICBhdXRvIHNvdXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3Vy
Y2VTaXRlRG9tYWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9t
YWluLCAiXG5Tb3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKKworICAgIGlmIChhdHRyaWJ1dGlvblR5
cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQp
IHsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1
bW5JbnQoMyk7CisgICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KTsKKyAgICAgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbklu
dCg2KTsKKworICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgeworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3Jp
dHksICJcbkF0dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7CisgICAgICAgICAg
ICBpZiAoZWFybGllc3RUaW1lVG9TZW5kID09IC0xKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJOb3Qgc2V0Iik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHNlY29uZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RU
aW1lVG9TZW5kKSAtIFdhbGxUaW1lOjpub3coKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgoc2Vjb25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhf
aCkgPyAiV2l0aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxu
Tm8gYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhLiIpOworICAgIH0gZWxzZQorICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7CisgICAgYnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitT
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dFRvU3RyaW5nKCkKK3sKKyAgICBhdXRvIHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikg
RlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVD
VCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250
MiJfcyk7CisgICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMgfHwgcHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cy0+Y29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmNv
bHVtbkludCgxKSkKKyAgICAgICAgcmV0dXJuICJcbk5vIHN0b3JlZCBQcml2YXRlIENsaWNrIE1l
YXN1cmVtZW50IGRhdGEuXG4iX3M7CisKKyAgICBhdXRvIHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXR0cmlidXRpb25zU3RhdGVtZW50LCBhbGxVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1F1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRUb1N0cmluZyJfcyk7CisKKyAgICBpZiAoIXVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZywg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgY29uc3QgY2hhciogcHJlZml4ID0gdW5hdHRyaWJ1dGVk
TnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRzOiI7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbicsCisgICAgICAgICAgICBh
dHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0cmlidXRlZCkpOworICAg
IH0KKworICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwg
YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKKworICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0
cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlZE51bWJlciA9IDA7CisgICAgd2hpbGUgKGF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlm
ICghYXR0cmlidXRlZE51bWJlcikKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHVuYXR0cmli
dXRlZE51bWJlciA/ICJcbiIgOiAiIiwgIkF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJl
bWVudHM6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbldlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50ICIsICsrYXR0cmlidXRlZE51bWJlciArIHVuYXR0cmlidXRlZE51bWJlciwg
J1xuJywKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uVG9TdHJpbmcoYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0
dHJpYnV0ZWQpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
c3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCYgYXR0cmlidXRpb24pCit7CisgICAgYXV0byBzb3VyY2VTaXRlRG9tYWlu
SUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4p
OworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlv
bi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJj
ZVNpdGVEb21haW5JRCB8fCAhZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCisgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBhdXRv
IHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2VhcmxpZXN0VGltZXNU
b1NlbmRTdGF0ZW1lbnQsIGVhcmxpZXN0VGltZXNUb1NlbmRRdWVyeSwgImVhcmxpZXN0VGltZXNU
b1NlbmQiX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8
U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRp
bWVUb1NlbmRUb0Rlc3RpbmF0aW9uOworICAgIAorICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGlj
YXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRl
LgorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKKyAgICAg
ICAgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgwKTsKKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkg
PiAwLjApCisgICAgICAgIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgxKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGlu
YXRpb24pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9y
dEFzU2VudFRvU291cmNlKFNvdXJjZURvbWFpbklEIHNvdXJjZVNpdGVEb21haW5JRCwgRGVzdGlu
YXRpb25Eb21haW5JRCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCkKK3sKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX21hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZVN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvU291cmNlUXVlcnksICJtYXJrUmVwb3J0
QXNTZW50VG9Tb3VyY2UiX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCBkZXN0aW5hdGlv
blNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb1NvdXJj
ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9uRG9tYWlu
SUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQg
PSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5hdGlvblN0
YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtSZXBvcnRB
c1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKKworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWluSUQpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclNlbnRBdHRyaWJ1
dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCBhdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50KQoreworICAgIGF1dG8gdGltZXNUb1NlbmQgPSBlYXJsaWVzdFRpbWVz
VG9TZW5kKGF0dHJpYnV0aW9uKTsKKyAgICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9
IHRpbWVzVG9TZW5kLmZpcnN0OworICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSB0aW1lc1RvU2VuZC5zZWNvbmQ7CisKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7Cisg
ICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLmRl
c3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKworICAgIGlmICghc291cmNlU2l0
ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSB7CisgICAgY2FzZSBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6U291cmNlOgor
ICAgICAgICBpZiAoIXNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgbWFya1JlcG9ydEFzU2VudFRvU291cmNlKCpzb3VyY2VTaXRlRG9tYWluSUQsICpkZXN0aW5h
dGlvblNpdGVEb21haW5JRCk7CisgICAgICAgIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6RGVzdGluYXRpb246CisgICAgICAgIGlm
ICghZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1h
cmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uKCpzb3VyY2VTaXRlRG9tYWluSUQsICpkZXN0aW5h
dGlvblNpdGVEb21haW5JRCk7CisgICAgICAgIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5k
ID0gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIERvbid0IGNsZWFyIHRoZSBhdHRyaWJ1
dGUgZnJvbSB0aGUgZGF0YWJhc2UgdW5sZXNzIGl0IGhhcyBiZWVuIHJlcG9ydGVkIGJvdGggdG8g
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc2l0ZS4KKyAgICBpZiAoZGVzdGluYXRpb25FYXJs
aWVzdFRpbWVUb1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEID0gPyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcoKQoreworICAgIGF1dG8gZXhwaXJl
ZFRpbWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gZWFy
bGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyJfcyk7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1Nl
bmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJV
UERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVU
b1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCJfcyk7CisKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291
cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVk
Rm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVt
ZW50IHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1Njb3BlRXhpdDxGdW5j
dGlvbjx2b2lkKCk+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmJlZ2luVHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQor
ICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsgW10geyB9IH0p
OworCisgICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOworICAgIHJldHVybiBtYWtlU2NvcGVFeGl0
KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10geworICAgICAgICBtX3RyYW5zYWN0aW9uLmNvbW1p
dCgpOworICAgIH0gfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisjdW5kZWYgSVRQ
X1JFTEVBU0VfTE9HCisjdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IDI0MjJmYzg0ZjU0ZWU3
Y2QzMGVlNDBmMTQyMDQyZDQxZWJmNTFiM2YuLmYwMjBkZjdjMjE3YmRlZGNiNTlhZTE4NGFhMTM3
Mzk4NWQ3MTY4OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIy
ICsyNywyMiBAQAogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW5nRGF0ZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
Q29jb2EuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Db25zb2xlVHlwZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0
ZVRyYW5zYWN0aW9uLmg+CisjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCi0jaWYgSEFWRShDT1JFX1BSRURJ
Q1RJT04pCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5o
IgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEtleWVkRGVjb2RlcjsKLWNs
YXNzIEtleWVkRW5jb2RlcjsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworY2xhc3MgU1FMaXRlU3Rh
dGVtZW50OwogZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwog
ZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7CiBzdHJ1Y3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljczsKQEAgLTUwLDE5MCArNTAsMTUyIEBAIHN0cnVjdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgT3BlcmF0aW5nRGF0
ZSB7Ci1wdWJsaWM6Ci0gICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKLSAgICAKLSAgICBz
dGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOwotICAgIHN0YXRpYyBP
cGVyYXRpbmdEYXRlIHRvZGF5KCk7Ci0gICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNv
bnN0OwotICAgIGludCB5ZWFyKCkgY29uc3QgeyByZXR1cm4gbV95ZWFyOyB9Ci0gICAgaW50IG1v
bnRoKCkgY29uc3QgeyByZXR1cm4gbV9tb250aDsgfQotICAgIGludCBtb250aERheSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9udGhEYXk7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0
aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRp
bmdEYXRlJiBvdGhlcikgY29uc3Q7Ci0gICAgCi0gICAgT3BlcmF0aW5nRGF0ZShpbnQgeWVhciwg
aW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCi0gICAgICAgIDogbV95ZWFyKHllYXIpCi0gICAgICAg
ICwgbV9tb250aChtb250aCkKLSAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQotICAgIHsg
fQotCi1wcml2YXRlOgotICAgIGludCBtX3llYXIgeyAwIH07Ci0gICAgaW50IG1fbW9udGggeyAw
IH07IC8vIFswLCAxMV0uCi0gICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCi19
OwotCi1jb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIHsgMzAgfTsK
LWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IHsgNyB9OwotY29u
c3RleHByIFNlY29uZHMgb3BlcmF0aW5nVGltZVdpbmRvd0ZvckxpdmVPblRlc3RpbmcgeyAxX2gg
fTsKLQotZW51bSBjbGFzcyBPcGVyYXRpbmdEYXRlc1dpbmRvdyA6IHVpbnQ4X3QgeyBMb25nLCBT
aG9ydCwgRm9yTGl2ZU9uVGVzdGluZywgRm9yUmVwcm9UZXN0aW5nIH07CitjbGFzcyBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXI7CiBlbnVtIGNsYXNzIENvb2tpZUFjY2VzcyA6IHVpbnQ4
X3QgeyBDYW5ub3RSZXF1ZXN0LCBCYXNlZE9uQ29va2llUG9saWN5LCBPbmx5SWZHcmFudGVkIH07
CiAKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mQnVja2V0c1BlclN0YXRpc3RpYyA9
IDU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0YXRpc3RpY3MgPSA3Oworc3Rh
dGljIGNvbnN0ZXhwciBzdGQ6OmFycmF5PHVuc2lnbmVkLCBudW1iZXJPZkJ1Y2tldHNQZXJTdGF0
aXN0aWM+IGJ1Y2tldFNpemVzIHt7IDEsIDMsIDEwLCA1MCwgMTAwIH19OworY29uc3RleHByIFNl
Y29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKK3N0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RU
cmFjZUJhY2sgeyA1MCB9OworCisvLyBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50LgordXNpbmcg
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ7Cit1c2luZyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9
IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OwordXNpbmcgU291cmNlU2l0ZSA9IFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlOwordXNpbmcgQXR0cmli
dXRpb25EZXN0aW5hdGlvblNpdGUgPSBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGU7Cit1c2luZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRh
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRh
dGE7Cit1c2luZyBTb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBkb3VibGU7Cit1c2luZyBEZXN0
aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IGRvdWJsZTsKK3VzaW5nIFNvdXJjZURvbWFpbklE
ID0gdW5zaWduZWQ7Cit1c2luZyBEZXN0aW5hdGlvbkRvbWFpbklEID0gdW5zaWduZWQ7CisKK3Vz
aW5nIEV4aXN0aW5nQ29sdW1ucyA9IFZlY3RvcjxTdHJpbmc+OwordXNpbmcgRXhwZWN0ZWRDb2x1
bW5zID0gVmVjdG9yPFN0cmluZz47Cit1c2luZyBFeGlzdGluZ0NvbHVtbk5hbWUgPSBTdHJpbmc7
Cit1c2luZyBFeHBlY3RlZENvbHVtbk5hbWUgPSBTdHJpbmc7Cit1c2luZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK3VzaW5nIFJlZ2lz
dHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBUb3BGcmFt
ZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgU3ViRnJhbWVEb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFN1YlJlc291cmNlRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgUmVkaXJlY3RlZEZyb21Eb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFJlZGlyZWN0ZWRUb0RvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgTmF2aWdhdGVkRnJvbURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgTmF2aWdhdGVkVG9Eb21haW4gPSBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgT3BlbmVyRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CisKK3R5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+PiBUYWJsZUFuZEluZGV4UGFpcjsKKwogLy8gVGhpcyBpcyBhbHdh
eXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgogY2xhc3MgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHVz
aW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzOwotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKLSAgICB1c2luZyBTdWJGcmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOwotICAgIHVzaW5nIFN1YlJlc291cmNlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3REb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIAotICAgIHZpcnR1YWwgflJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSgpOworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBTdXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgs
IFBBTDo6U2Vzc2lvbklEKTsKKyAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBWZWN0
b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4gYWdncmVn
YXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3QgPSAwOworICAgIHN0YXRpYyBIYXNoU2V0PFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSo+JiBhbGxTdG9yZXMoKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsK
LSAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0gICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBpbnRlcnJ1cHQoKTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICB2b2lk
IGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgdm9pZCBydW5JbmNyZW1lbnRhbFZhY3V1
bUNvbW1hbmQoKTsKKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwogCi0g
ICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgc3RkOjpvcHRp
b25hbDxWZWN0b3I8U3RyaW5nPj4gY2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
PiYmKSA9IDA7CisgICAgdm9pZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0
YXRpc3RpY3M+JiYpOworICAgIHZvaWQgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJik7CisgICAgdm9pZCByZXNvdXJjZVRv
U3RyaW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvcGVuZXJJRCwgT3BlbmVyRG9t
YWluJiYpID0gMDsKLSAgICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpUaGlyZFBhcnR5RGF0YT4gYWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluc1RvQmxvY2tDb29raWVzRm9yJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKIAorICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291
cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7
CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKKyAgICB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4mKTsKICAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0
YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgdmlydHVhbCBib29sIGlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhbmRmYXRoZXJl
ZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpID0gMDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21h
aW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
PiYpID0gMDsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKKyAgICB2
b2lkIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcyk7CisgICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
OworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKKyAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7CisgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBS
ZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0Owor
ICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsK
KyAgICB2b2lkIGNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudChjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgCisgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZy
YW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJik7CisgICAgdm9pZCBy
ZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBvcGVuZXJJRCwgT3BlbmVyRG9tYWluJiYpOwor
ICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIs
IFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3RvcmFnZUFj
Y2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NX
YXNHcmFudGVkKT4mJik7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4m
KSA9IDA7CisgICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21h
aW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBi
b29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVsYXlBZnRlck1haW5G
cmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlcik7Cisg
ICAgdm9pZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbnN0IE5hdmlnYXRl
ZEZyb21Eb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYpOworICAgIHZvaWQgbG9nVXNl
ckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICBib29sIGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVzV2lu
ZG93KTsKIAorICAgIHZvaWQgc2V0SXNSdW5uaW5nVGVzdChib29sKTsKICAgICB2b2lkIGxvZ1Rl
c3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0Vu
dHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KTsKLSAgICB2b2lkIHNldFBydW5lRW50cmll
c0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCk7CisgICAgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOwogICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKCk7CisgICAgYm9vbCBzaG91bGRTa2lwKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7CisgICAgdm9pZCBpbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIHVuc2lnbmVkIG51bWJlck9mT3BlcmF0aW5nRGF5c1Bh
c3NlZCwgYm9vbCBoYXNVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRD
b29raWVEYXRhUmVtb3ZhbCwgYm9vbCBpc1ByZXZhbGVudCk7CisgICAgYm9vbCBpc0NvcnJlY3RT
dWJTdGF0aXN0aWNzQ291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpOwogCiAgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wpOwotICAgIHZvaWQgc2V0SXNSdW5uaW5nVGVzdChib29sKTsKLSAgICBib29s
IHNob3VsZFNraXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKICAgICB2b2lkIHNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwot
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lk
IHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB2b2lkIGNsYXNzaWZ5UHJl
dmFsZW50UmVzb3VyY2VzKCk7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCk7CisgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChi
b29sKTsKKyAgICBib29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7CisgICAgYm9v
bCBzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURhdGFEZWxldGlvbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0OwogICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKFNlY29uZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMp
OwotICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKLSAg
ICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5h
YmxlZDsgfTsKLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgdm9pZCBzZXRUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgbW9kZSkgeyBtX3Ro
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBtb2RlOyB9OwotICAgIFdlYkNvcmU6OlRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsgfTsKLSAgICB2b2lk
IHNldFNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKFdlYkNvcmU6OlNhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkIGVuYWJsZWQpIHsgbV9zYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50RW5hYmxlZCA9IGVuYWJsZWQ7IH07Ci0gICAgYm9vbCBpc1NhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
RW5hYmxlZCA9PSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZDo6WWVz
OyB9OwotICAgIHZvaWQgc2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoV2ViQ29y
ZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgbW9kZSkgeyBtX2ZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbW9kZTsgfQotICAgIHZvaWQgc2V0U3RhbmRhbG9uZUFw
cGxpY2F0aW9uRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluJiYgZG9tYWluKSB7IG1fc3RhbmRhbG9u
ZUFwcGxpY2F0aW9uRG9tYWluID0gV1RGTW92ZShkb21haW4pOyB9Ci0jaWYgRU5BQkxFKEFQUF9C
T1VORF9ET01BSU5TKQotICAgIHZvaWQgc2V0QXBwQm91bmREb21haW5zKEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+JiYpOwotI2VuZGlmCi0gICAgdmlydHVhbCBib29sIGFyZUFsbFRoaXJkUGFy
dHlDb29raWVzQmxvY2tlZFVuZGVyKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4s
IFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9t
YWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4m
JiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2Vi
Q29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
U2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dy
YW50ZWQpPiYmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZp
Z2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lLCBTZWNv
bmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQsIGJvb2wgd2FzUG90ZW50aWFsbHlJ
bml0aWF0ZWRCeVVzZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0aW9u
KGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29u
c3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJikgPSAwOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJh
dGluZ0RhdGVzV2luZG93KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFNlZW4oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHByaW1hcnlEb21haW4sIFNlY29uZHMpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCByZW1vdmVEYXRhRm9yRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgPSAwOwotCi0gICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFp
bnMoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0K
LSAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdG9yZTsgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhJ
bXBvcnRhbmNlIHsgMyB9OworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxsRG9tYWlu
cygpIGNvbnN0OworICAgIGJvb2wgZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCk7CisgICAg
dm9pZCByZW1vdmVEYXRhRm9yRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAg
Ym9vbCBzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3JTcGVjaWZpY0RvbWFpbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzTWVtb3J5U3Rv
cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFiYXNl
U3RvcmUoKWNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KTsKKyAgICB2b2lkIHVwZGF0ZUNsaWVu
dFNpZGVDb29raWVzQWdlQ2FwKCk7CisgICAgdm9pZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29v
a2llcyhTZWNvbmRzKTsKKyAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOworICAg
IHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24oU2Vjb25kcyk7CisgICAgdm9pZCBzZXRBcHBCb3VuZERvbWFpbnMoSGFzaFNl
dDxSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgaW5jbHVkZVRvZGF5
QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
T3BlcmF0aW5nRGF0ZXMoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc1N0YXRpc3RpY3NFeHBp
cmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBPcGVyYXRpbmdEYXRl
c1dpbmRvdykgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRFeHBpcmVkU3RhdGlz
dGljRm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIHVuc2lnbmVkIG51bWJlck9m
T3BlcmF0aW5nRGF5c1Bhc3NlZCwgYm9vbCBoYXNVc2VySW50ZXJhY3Rpb24sIGJvb2wgaXNTY2hl
ZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgYm9vbCkgPSAwOwotICAgIAogICAgIC8v
IFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCi0gICAgdmlydHVhbCB2b2lkIGluc2VydFByaXZh
dGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZv
clRlc3RpbmcoKSA9IDA7Ci0gICAgdmlydHVhbCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNlbmREYXRhPiBhdHRy
aWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1
cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpID0gMDsKLSAgICB2aXJ0dWFs
IFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclByaXZh
dGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aW9uYWw8UmVnaXN0cmFibGVEb21haW4+KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmco
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlBy
aXZhdGVDbGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpID0g
MDsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0KLSAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgU3VzcGVu
ZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0KTsKLSAgICAKLSAgICBib29s
IGRhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZDsgfQotCi0gICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElmTmVjZXNzYXJ5KCk7Ci0gICAgYm9vbCBzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RG
b3JTcGVjaWZpY0RvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIHZp
cnR1YWwgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNG
b3JEZWJ1Z01vZGUoKSA9IDA7Ci0gICAgdmlydHVhbCBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVz
dHJpY3RXZWJzaXRlRGF0YUZvcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQoKSA9IDA7Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUm
IHN0b3JlKCkgeyByZXR1cm4gbV9zdG9yZTsgfQotICAgIFJlZjxTdXNwZW5kYWJsZVdvcmtRdWV1
ZT4mIHdvcmtRdWV1ZSgpIHsgcmV0dXJuIG1fd29ya1F1ZXVlOyB9Ci0jaWYgSEFWRShDT1JFX1BS
RURJQ1RJT04pCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSYgY2xh
c3NpZmllcigpIHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7IH0K
LSNlbHNlCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXImIGNsYXNzaWZpZXIo
KSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9Ci0jZW5kaWYK
KyAgICB2b2lkIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBl
KTsKKyAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFz
RXhwaXJlZEZvclRlc3RpbmcoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNlbmREYXRhPiBhdHRyaWJ1
dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpOworICAgIFZlY3RvcjxXZWJDb3Jl
OjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50KCk7CisgICAgdm9pZCBjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0
aW9uYWw8UmVnaXN0cmFibGVEb21haW4+KTsKKyAgICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50KCk7CisgICAgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9T
dHJpbmcoKTsKKyAgICB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvblJlcG9ydEVuZHBvaW50KTsKKyAgICB2b2lkIG1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpOworICAgIFZlY3RvcjxTdHJpbmc+
IGNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmKTsKIAogICAgIHN0cnVjdCBQYXJhbWV0ZXJz
IHsKICAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OwpAQCAtMjQ5LDYg
KzIxMSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHNpemVfdCBtaW5pbXVtVG9wRnJhbWVSZWRp
cmVjdHNGb3JTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IHsgMTAgfTsKICAgICAgICAgYm9vbCBp
c1J1bm5pbmdUZXN0IHsgZmFsc2UgfTsKICAgICB9OworICAgIAorICAgIFdlYkNvcmU6OlRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGUgdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTsgfTsKKyAgICB2b2lk
IHNldFRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tp
ZUJsb2NraW5nTW9kZSBtb2RlKSB7IG1fdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG1v
ZGU7IH07CisgICAgdm9pZCBzZXRTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZChXZWJD
b3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCBlbmFibGVkKSB7IG1fc2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBlbmFibGVkOyB9OworICAgIGJvb2wgaXNTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPT0gV2ViQ29yZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQ6OlllczsgfTsKKyAgICB2b2lkIHNldEZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIG1vZGUp
IHsgbV9maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSA9IG1vZGU7IH0KKyAgICB2b2lk
IHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbihSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFp
bikgeyBtX3N0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbiA9IFdURk1vdmUoZG9tYWluKTsgfQor
ICAgIGJvb2wgZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFS
ZWNvcmRzQmVpbmdSZW1vdmVkOyB9CiAgICAgY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIFdhbGxUaW1lJiBlbmRPZkdyYW5k
ZmF0aGVyaW5nVGltZXN0YW1wKCkgeyByZXR1cm4gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0
YW1wOyB9CiAgICAgY29uc3QgV2FsbFRpbWUmIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAo
KSBjb25zdCB7IHJldHVybiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7IH0KQEAgLTI2
MSwyMSArMjMxLDEzNSBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBkZWJ1Z0xvZ2dpbmdFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkOyB9OwogICAgIGJvb2wgZGVi
dWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfQogICAg
IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlIGZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdFBhcnR5V2Vic2l0ZURh
dGFSZW1vdmFsTW9kZTsgfQotICAgIGJvb2wgc2hvdWxkRXhlbXB0RnJvbVdlYnNpdGVEYXRhRGVs
ZXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJh
Y2sgeyA1MCB9OwotICAgIAotICAgIFZlY3RvcjxDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+PiBt
X2RhdGFSZWNvcmRSZW1vdmFsQ29tcGxldGlvbkhhbmRsZXJzOworICAgIGJvb2wgaXNOZXdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ld1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KKyAgICB2b2lkIHNldElzTmV3UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlzTmV3UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlRmlsZSA9IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZTsgfQogCiBw
cml2YXRlOgotICAgIGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2
b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQoYm9vbCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgb3BlbklUUERhdGFiYXNlKCk7
CisgICAgdm9pZCBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIGNy
ZWF0ZVVuaXF1ZUluZGljZXMoKTsKKyAgICBib29sIGNyZWF0ZVNjaGVtYSgpOworICAgIHZvaWQg
YWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBtaXNzaW5nVW5pcXVlSW5k
aWNlcygpOworICAgIGJvb2wgbmVlZHNVcGRhdGVkU2NoZW1hKCk7CisgICAgYm9vbCBuZWVkc1Vw
ZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVtYSgpOworICAgIHZvaWQgcmVuYW1lQ29s
dW1uSW5UYWJsZShTdHJpbmcmJiwgRXhpc3RpbmdDb2x1bW5OYW1lJiYsIEV4cGVjdGVkQ29sdW1u
TmFtZSYmKTsKKyAgICB2b2lkIGFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZShTdHJpbmcmJiwgY29u
c3QgRXhpc3RpbmdDb2x1bW5zJiwgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJik7CisgICAgdm9pZCBh
ZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCByZW5hbWVDb2x1bW5zSWZO
ZWNlc3NhcnkoKTsKKyAgICB2b2lkIHJlbmFtZUNvbHVtbkluVGFibGUoKTsKKyAgICBUYWJsZUFu
ZEluZGV4UGFpciBjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCB1cGRhdGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVtYUlmTmVjZXNzYXJ5KCk7
CisgICAgdm9pZCBlbmFibGVGb3JlaWduS2V5cygpOworICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5j
ZVRvT2JzZXJ2ZWREb21haW5zKCk7CisgICAgdm9pZCBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZO
ZWNlc3NhcnkoKTsKKyAgICB2b2lkIGNsZWFyRGF0YWJhc2VDb250ZW50cygpOworCisgICAgdm9p
ZCBkZXN0cm95U3RhdGVtZW50cygpOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9S
ZXNldFNjb3BlIHNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiYsIEFTQ0lJTGl0ZXJhbCwgY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICBi
b29sIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBTdWJGcmFt
ZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3Vi
RnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXI+LCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFn
ZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKTsK
KyAgICBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gaGFzVXNlckdyYW50ZWRT
dG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKTsKKyAgICBib29sIGFyZUFsbFRoaXJkUGFydHlDb29raWVzQmxvY2tlZFVu
ZGVyKGNvbnN0IFRvcEZyYW1lRG9tYWluJik7CisgICAgQ29va2llQWNjZXNzIGNvb2tpZUFjY2Vz
cyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7CisKKyAg
ICBWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFy
dHlEb21haW5zKHVuc2lnbmVkLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAg
IFNlY29uZHMgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7CisKKyAgICB2b2lkIG1lcmdl
U3RhdGlzdGljKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIG1lcmdl
KFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
KTsKKyAgICBib29sIGluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4mLCB1bnNpZ25lZCk7CisgICAgU3RyaW5nIGVuc3VyZUFuZE1ha2VEb21haW5M
aXN0KGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jik7CisgICAgYm9vbCByZWxhdGlv
bnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgc2Vjb25kRG9tYWluKSBjb25zdDsKKworICAgIFN0cmluZyBnZXREb21haW5TdHJpbmdGcm9t
RG9tYWluSUQodW5zaWduZWQpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGRv
bWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgYm9vbCBkb21haW5F
eGlzdHMoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRl
TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxsVGltZSk7CisgICAgdm9pZCB1
cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBpbnQpOwor
CisgICAgc3RydWN0IERvbWFpbkRhdGEgeworICAgICAgICB1bnNpZ25lZCBkb21haW5JRDsKKyAg
ICAgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW47CisgICAgICAgIFdhbGxU
aW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOworICAgICAgICBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbjsKKyAgICAgICAgYm9vbCBncmFuZGZhdGhlcmVkOworICAgICAgICBib29sIGlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWw7CisgICAgICAgIHVuc2lnbmVkIHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQ7Cisg
ICAgfTsKKworICAgIFZlY3RvcjxEb21haW5EYXRhPiBkb21haW5zKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIGhhZFVz
ZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUpOworICAgIGJvb2wgaGFzSGFkVW5leHBpcmVkUmVjZW50
VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRhdGEmLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyk7
CisgICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUoY29uc3QgRG9tYWluRGF0YSYpOworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2Fs
bFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVzV2luZG93
KSBjb25zdDsKKworICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+
JiYpOworICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJik7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAo
U2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHZvaWQgc2V0
QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDbGll
bnRTaWRlQ29va2llc0FnZUNhcCgpOworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBk
b21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IoKSBjb25zdDsKKyAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IoKSBjb25zdDsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9u
QXNGaXJzdFBhcnR5KCkgY29uc3Q7CisgICAgSGFzaE1hcDxUb3BGcmFtZURvbWFpbiwgU3ViUmVz
b3VyY2VEb21haW4+IGRvbWFpbnNXaXRoU3RvcmFnZUFjY2VzcygpIGNvbnN0OworCisgICAgdm9p
ZCByZWNsYXNzaWZ5UmVzb3VyY2VzKCk7CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRl
ZCgpOworICAgIGJvb2wgcHJlZGljYXRlVmFsdWVGb3JEb21haW4oV2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50QXV0b1Jlc2V0U2NvcGUmLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0Owor
CisgICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7IE5vLCBZZXMgfTsKKyAgICBzdGQ6OnBhaXI8
QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKKworICAgIHN0cnVjdCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHsK
KyAgICAgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0cmFibGVEb21haW47CisgICAgICAgIFJl
c291cmNlTG9hZFByZXZhbGVuY2UgcHJldmFsZW5jZTsKKyAgICAgICAgdW5zaWduZWQgc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCBzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKKyAgICAgICAgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50OworICAgIH07CisKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzPiBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworICAg
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25QcmV2
YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFyeURv
bWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMs
IHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOworICAgIHZvaWQgc2V0RG9tYWluc0Fz
UHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7CisgICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisKKyAgICBib29sIHNo
b3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3Vs
ZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpOworICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29v
a2llc0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nKTsKKyAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5EYXRh
JiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKKyAgICBSZWdpc3RyYWJsZURv
bWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpOworCisgICAgQVNDSUlMaXRlcmFsIGdl
dFN1YlN0YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2b2lkIGFw
cGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7CisKKyAgICB2b2lkIGNsZWFyT3BlcmF0
aW5nRGF0ZXMoKSAgeyB9CisgICAgdm9pZCB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMo
KTsKKworICAgIFNjb3BlRXhpdDxGdW5jdGlvbjx2b2lkKCk+PiBXQVJOX1VOVVNFRF9SRVRVUk4g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9zdG9yZTsgfQorI2lmIEhBVkUoQ09SRV9Q
UkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNs
YXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9
CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVy
KCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsgfQorI2VuZGlm
CisgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiYgd29ya1F1ZXVlKCkgeyByZXR1cm4gbV93
b3JrUXVldWU7IH0KKworICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCisgICAgdm9p
ZCByZW1vdmVVbmF0dHJpYnV0ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsK
KyAgICBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBidWlsZFByaXZhdGVDbGlja01l
YXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVD
bGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKTsKKyAgICBTdHJpbmcgYXR0cmlidXRpb25U
b1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dEF0dHJpYnV0aW9uVHlwZSk7CisgICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudD4+IGZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBX
ZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNv
cmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYp
OworICAgIHZvaWQgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24oU291cmNlRG9tYWluSUQs
IERlc3RpbmF0aW9uRG9tYWluSUQpOworICAgIHZvaWQgbWFya1JlcG9ydEFzU2VudFRvU291cmNl
KFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEKTsKKyAgICBzdGQ6OnBhaXI8c3Rk
OjpvcHRpb25hbDxTb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3Rp
bmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPj4gZWFybGllc3RUaW1lc1RvU2VuZChjb25zdCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYpOwogCiAgICAgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiBtX3N0b3JlOwogICAgIFJlZjxTdXNwZW5kYWJsZVdvcmtRdWV1ZT4gbV93
b3JrUXVldWU7CkBAIC0zMDMsNiArMzg3LDc0IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6Rmly
c3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgbV9maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZSB7IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxC
dXRDb29raWVzIH07CiAgICAgUmVnaXN0cmFibGVEb21haW4gbV9zdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW47CiAgICAgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4gbV9hcHBCb3VuZERvbWFp
bnM7CisgICAgVmVjdG9yPENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4+IG1fZGF0YVJlY29yZFJl
bW92YWxDb21wbGV0aW9uSGFuZGxlcnM7CisKKyAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25J
RDsKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKyAgICBib29sIG1f
aXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKKworICAg
IHVuc2lnbmVkIG1fb3BlcmF0aW5nRGF0ZXNTaXplIHsgMCB9OworICAgIHN0ZDo6b3B0aW9uYWw8
T3BlcmF0aW5nRGF0ZT4gbV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZTsKKyAgICBzdGQ6Om9wdGlv
bmFsPE9wZXJhdGluZ0RhdGU+IG1fc2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlOworICAgIE9wZXJh
dGluZ0RhdGUgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZTsKKworICAgIG11dGFibGUgV2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0
ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CisKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVu
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQ7CisgICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tRXhpc3RzU3Rh
dGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV90b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzRXhpc3RzU3RhdGVtZW50Owor
ICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9z
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0V4aXN0c1N0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVMYXN0U2VlblN0
YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlUHJldmFsZW50UmVzb3Vy
Y2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVWZXJ5UHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlR3JhbmRmYXRoZXJl
ZFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0
YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1l
bnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jb3Vu
dFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jb3VudFByZXZhbGVudFJl
c291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldFJlc291cmNlRGF0YUJ5
RG9tYWluTmFtZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0QWxsRG9tYWluc1N0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRBbGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50OworICAg
IG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zdG9y
YWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1w
U3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc2NyaXB0TG9hZEV4aXN0
c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YlJlc291cmNlRXhpc3RzU3Rh
dGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fb2JzZXJ2ZWREb21haW5zRXhp
c3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV9yZW1vdmVBbGxEYXRhU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9lYXJsaWVzdFRpbWVzVG9TZW5k
U3RhdGVtZW50OworICAgIAorICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX3NldFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNF
eHBpcmVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVu
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFy
QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV9hbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0
dHJpYnV0aW9uc1N0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVu
dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2ZpbmRV
bmF0dHJpYnV0ZWRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV9maW5kQXR0cmlidXRlZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUF0dHJpYnV0aW9uc0VhcmxpZXN0
VGltZVRvU2VuZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21hcmtSZXBvcnRBc1NlbnRUb1NvdXJj
ZVN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX21hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwCmluZGV4IDRkYjgwN2E3ZDlkNzA1NDAxZWQ1OWE2Y2VlZTJhZDdiMjQwNjc3NDAu
LjY1OWIzOTBhNGE4ZDM2OWUzNTkzMTAwNWNjYzYxNzE5YmI0OWZmNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zNCw4ICszNCw3IEBA
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIu
aCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVy
U3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRl
ICJXZWJGcmFtZVByb3h5LmgiCkBAIC0xNjQsMTAgKzE2Myw3IEBAIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKE5ldHdvcmtTZXNz
aW9uJiBuCiAKICAgICBpZiAoIXJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0
eSgpKSB7CiAgICAgICAgIHBvc3RUYXNrKFt0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc29sYXRlZENvcHkoKSwg
c2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgc2Vzc2lvbklEID0gbmV0d29ya1Nlc3Npb24uc2Vzc2lv
bklEKCldIHsKLSAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gbWFrZVVuaXF1ZTxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVl
LCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5
LCBzZXNzaW9uSUQpOwotCi0gICAgICAgICAgICBhdXRvIG1lbW9yeVN0b3JlID0gbWFrZVVuaXF1
ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NR
dWV1ZSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCk7Ci0gICAgICAgICAgICBkb3duY2FzdDxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlLmdldCgp
KS5wb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSgqbWVtb3J5U3RvcmUpOworICAgICAgICAgICAgbV9z
dGF0aXN0aWNzU3RvcmUgPSBtYWtlVW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4o
KnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBzZXNzaW9uSUQpOwogCiAgICAgICAgICAgICBhdXRv
IGxlZ2FjeVBsaXN0RmlsZVBhdGggPSBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25l
bnQocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lv
bl9yZXNvdXJjZUxvZy5wbGlzdCIpOwogICAgICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVF
eGlzdHMobGVnYWN5UGxpc3RGaWxlUGF0aCkpCkBAIC0yNDAsMTMgKzIzNiwxMiBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNr
KENvbXBsZXRpb25IYW5kbAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAg
ICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlICYmIGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBk
YXRhYmFzZVN0b3JlID0gZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7Ci0gICAgICAgICAgICBpZiAoZGF0YWJhc2VTdG9yZS5p
c05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUoKSkgeworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUgJiYgaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9z
dGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUtPmlz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSgpKSB7CiAgICAgICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbcHJv
dGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGRhdGFiYXNlU3RvcmUuc2V0SXNOZXdSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxl
KGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgICAgICBsb2dUZXN0aW5nRXZlbnQoIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZh
dGhlcmluZyJfcyk7CkBAIC0zMTAsMTIgKzMwNSwxMiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlSGFzQWxsVGFibGVzKENvbXBsZXRpb25I
YQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7IAotICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgeworICAgICAg
ICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gbWlzc2luZ1RhYmxlcyA9IGRvd25jYXN0
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
LmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCk7CisgICAgICAgIGF1dG8gbWlzc2luZ1Rh
YmxlcyA9IG1fc3RhdGlzdGljc1N0b3JlLT5jaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgp
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYXNBbGxUYWJsZXMgPSBtaXNzaW5nVGFibGVzID8g
ZmFsc2UgOiB0cnVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc0FsbFRh
Ymxlcyk7CiAgICAgICAgIH0pOwpAQCAtMzI3LDEyICszMjIsMTIgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUNvbHVtbnNGb3JUYWJsZShj
b25zdCBTdHIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2so
W3RoaXMsIHRhYmxlID0gdGFibGUuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9z
dGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
PigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUg
fHwgIWlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGF1dG8gY29sdW1ucyA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmNvbHVtbnNGb3JUYWJsZSh0YWJsZSk7CisgICAgICAg
IGF1dG8gY29sdW1ucyA9IG1fc3RhdGlzdGljc1N0b3JlLT5jb2x1bW5zRm9yVGFibGUodGFibGUp
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFtjb2x1bW5zID0gV1RGTW92ZShjb2x1bW5zKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGNvbHVtbnMpKTsKICAgICAg
ICAgfSk7CkBAIC03MzUsOCArNzMwLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKICAgICBwb3N0VGFzayhbdGhpc10gewogICAgICAg
ICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwotICAgICAgICAgICAg
aWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNz
U3RvcmUpKQotICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29t
bWFuZCgpOworICAgICAgICAgICAgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+
cnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7CiAgICAgICAgIH0KICAgICB9KTsKIH0KQEAg
LTg4OSwxMiArODg0LDEyIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpp
c1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJEb21haW4gPSBzdWJE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcERvbWFpbiA9IHRvcERvbWFpbi5pc29sYXRlZENvcHko
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKKyAgICAgICAg
aWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGJvb2wgaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UgPSBkb3duY2FzdDxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKS5pc0NvcnJl
Y3RTdWJTdGF0aXN0aWNzQ291bnQoc3ViRG9tYWluLCB0b3BEb21haW4pOworICAgICAgICBib29s
IGlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlID0gbV9zdGF0aXN0aWNzU3RvcmUtPmlz
Q29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChzdWJEb21haW4sIHRvcERvbWFpbik7CiAgICAgICAg
IAogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25j
ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUmVsYXRpb25zaGlwT25seUlu
RGF0YWJhc2VPbmNlKTsKQEAgLTExNTEsOCArMTE0Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3Vs
ZEdyCiAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRo
ZXJTdGF0aXN0aWNzOjpZZXMpIHsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3Rv
cmUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFj
a0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlz
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkuc2V0SXNOZXdSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VGaWxlKHRydWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldElzTmV3UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlRmlsZSh0cnVlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdo
ZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAgICAgICAgICAgICB9CkBAIC0xMTg1
LDEyICsxMTgwLDExIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21h
aW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklELCBDb21wCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5JRCwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRp
c3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0
aWNzU3RvcmUpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYXV0byYgZGF0YWJhc2VTdG9yZSA9
IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0
aWNzU3RvcmUpOwotICAgICAgICBib29sIGRvbWFpbklERXhpc3RzID0gZGF0YWJhc2VTdG9yZS5k
b21haW5JREV4aXN0c0luRGF0YWJhc2UoZG9tYWluSUQpOworICAgICAgICBib29sIGRvbWFpbklE
RXhpc3RzID0gbV9zdGF0aXN0aWNzU3RvcmUtPmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShkb21h
aW5JRCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2RvbWFpbklERXhpc3RzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZG9tYWluSURFeGlzdHMpOwogICAgICAgICB9KTsKQEAg
LTE0NDgsNyArMTQ0Miw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
dXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0CiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHNoYXJlZFN0YXRpc3RpY3NRdWV1ZSgpLT5zdXNwZW5k
KFtdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VTdG9yZSA6IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphbGxTdG9yZXMoKSkKKyAgICAgICAgZm9y
IChhdXRvJiBkYXRhYmFzZVN0b3JlIDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphbGxT
dG9yZXMoKSkKICAgICAgICAgICAgIGRhdGFiYXNlU3RvcmUtPmludGVycnVwdCgpOwogICAgIH0s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9PcGVyYXRpbmdEYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY1YTJiODFmZjdmYTA4MTVkMDBk
ZjUyZjYyNTc1YTI2MmMzNjgzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7CitwdWJsaWM6CisgICAgT3BlcmF0aW5n
RGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2Fs
bFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCk7CisgICAg
U2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0OworICAgIGludCB5ZWFyKCkgY29uc3Qg
eyByZXR1cm4gbV95ZWFyOyB9CisgICAgaW50IG1vbnRoKCkgY29uc3QgeyByZXR1cm4gbV9tb250
aDsgfQorICAgIGludCBtb250aERheSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9udGhEYXk7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAg
CisgICAgT3BlcmF0aW5nRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCisg
ICAgICAgIDogbV95ZWFyKHllYXIpCisgICAgICAgICwgbV9tb250aChtb250aCkKKyAgICAgICAg
LCBtX21vbnRoRGF5KG1vbnRoRGF5KQorICAgIHsgfQorCitwcml2YXRlOgorICAgIGludCBtX3ll
YXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1f
bW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9OworCitjb25zdGV4cHIgdW5zaWduZWQgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIHsgMzAgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRp
bmdEYXRlc1dpbmRvd1Nob3J0IHsgNyB9OworY29uc3RleHByIFNlY29uZHMgb3BlcmF0aW5nVGlt
ZVdpbmRvd0ZvckxpdmVPblRlc3RpbmcgeyAxX2ggfTsKKworZW51bSBjbGFzcyBPcGVyYXRpbmdE
YXRlc1dpbmRvdyA6IHVpbnQ4X3QgeyBMb25nLCBTaG9ydCwgRm9yTGl2ZU9uVGVzdGluZywgRm9y
UmVwcm9UZXN0aW5nIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXgg
NjZhZWRhNDNjODJkOGJmYjMzNWJiZmVmNjA5NWQwNGVmYWRiODYyMC4uMzkxYWQ5NmVjNzUwYWEx
NjY3ODlkYzI5YTQ2MzJmNTQ3OGQ3Yzg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC04Myw4ICs4Myw2IEBA
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9Q
aW5nTG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByZWNvbm5lY3RUYXNrLmNwcAogCi1OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cAotTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZmUzZDMyYjMyOTVjMmM0NGZkNDQ0NGNkZDdmMTQxZjI0MDA0Y2EwMi4uZGJiNWE4M2Q1MWJl
MWYzODI0N2E0NDA2ZTI2OGFkZDNlYjM5MzVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMDAwLDYgKzEwMDAsOCBAQAogCQk0OUJD
QTE5MjIzQTE3NzY2MDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFy
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QkNB
MTkxMjNBMTc3NjYwMDI4QTgzNiAvKiBBUElSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0
eS5oICovOyB9OwogCQk0OUJDQTE5NTIzQTE4Q0ZEMDAyOEE4MzYgLyogX1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCQ0ExOTAyM0ExNzU0OTAwMjhBODM2IC8qIF9XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SW50ZXJuYWwuaCAqLzsgfTsKIAkJNDlCQ0ExOTcy
M0ExOTMwRDAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUJDQTE5NjIz
QTE4RjYyMDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkuaCAq
LzsgfTsKKwkJNDlDRUI0RkUyNkQ2QzE3NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDRUI0RkQyNkQ2
QzE3NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3BwICovOyB9OworCQk0OUNFQjUwMTI2RDZD
MjJFMDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDRUI1MDAyNkQ2QzIxMDAwMUE0QzYzIC8qIE9wZXJhdGlu
Z0RhdGUuaCAqLzsgfTsKIAkJNDlFQ0E0MUMyM0ZDQTVEODAwMjMzNThEIC8qIFBvbGljeURlY2lz
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVD
QTQxQjIzRkNBNDg2MDAyMzM1OEQgLyogUG9saWN5RGVjaXNpb24uaCAqLzsgfTsKIAkJNDlGQkVG
RkQyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGQkVG
RkMyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5
Lm1tICovOyB9OwogCQk0OUZCRUZGRjIzOUIwMTJGMDBCRDAzMkYgLyogX1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUZCRUZGRTIzOUIwMTJGMDBCRDAzMkYgLyogX1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkubW0gKi87IH07CkBAIC0xMzQ2LDcgKzEzNDgsNiBAQAogCQk3
QUI2RUE0NzFFRUFCNkI4MDAwMzdCMkIgLyogQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FCNkVBNDYxRUVBQjZC
MDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLzsgfTsKIAkJN0FGMjM2MjEx
RTc5QTQwODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGMjM2MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9y
cy5oICovOyB9OwogCQk3QUZCRDM2MzIxRTUwRjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmggKi87IH07Ci0JCTdBRkJEMzY3MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLzsgfTsKIAkJN0FGQkQzNkYyMUU1NDZGODAwNURC
QUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdBRkJEMzZEMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0
aWxzLmggKi87IH07CiAJCTdCMURCMjY2MjU2NjhDRTEwMDBFMjZCQyAvKiBBcnJheVJlZmVyZW5j
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0IxREIy
NjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJlbmNlLmggKi87IH07CiAJCTdCNDgzRjFG
MjVDRERBOUMwMDEyMDQ4NiAvKiBNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjQ4M0YxQjI1Q0REQTlCMDAxMjA0
ODYgLyogTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oICovOyB9OwpAQCAtMzk3NCw2ICszOTc1LDgg
QEAKIAkJNDlCQ0ExOTAyM0ExNzU0OTAwMjhBODM2IC8qIF9XS1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGaXJzdFBhcnR5SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUJDQTE5MTIzQTE3NzY2MDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zp
cnN0UGFydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlCQ0ExOTYyM0ExOEY2MjAw
MjhBODM2IC8qIEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ5Q0VCNEZEMjZENkMxNzcwMDFBNEM2MyAvKiBPcGVyYXRpbmdE
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9wZXJhdGluZ0RhdGUuY3BwOyBwYXRoID0gQ2xh
c3NpZmllci9PcGVyYXRpbmdEYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NDlDRUI1MDAyNkQ2QzIxMDAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3BlcmF0aW5nRGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OURBQTM4
QjI0Q0JBMUE4MDA3OTNENzUgLyogRGVmYXVsdFdlYkJyb3dzZXJDaGVja3MubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDlEQUEzOEQyNENCQTFCRDAwNzkzRDc1IC8qIERlZmF1bHRXZWJCcm93
c2VyQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNBNDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQ
b2xpY3lEZWNpc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2xpY3lEZWNpc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYyNSw4ICs0NjI4LDggQEAKIAkJNzVBOEQyQzUxODdD
Q0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURh
dGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vi
c2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2
MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgcGF0
aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNG
NTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE1MDY3
MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbmFtZSA9ICJjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2Ii
OyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5wbHVnaW4t
Y29tbW9uLnNiIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0ExRTJB
ODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQSU5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBM0FDRTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJ
bmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC00NjQ4LDE0ICs0NjUxLDEwIEBACiAJCTdBQjRFQTQyMjI3Nzgw
REQwMDg1QkJBQSAvKiBTYW5kYm94VXRpbGl0aWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
U2FuZGJveFV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVB
NDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUljb25EYXRhYmFzZUNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJY29uRGF0YWJhc2VDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVBQjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xv
Y2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJR2Vv
bG9jYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUNFODJF
NzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFGMUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJv
cnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVy
cm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2MjIxRTUw
RjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FGQkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBw
YXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOyBwYXRoID0g
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGQkQzNkQyMUU1NDZFMzAwNURCQUNCIC8qIFBlcnNpc3Rl
bmN5VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lzdGVuY3lVdGlscy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2RTIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVu
Y3lVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxREIyNjUyNTY2OENFMDAwMEUyNkJDIC8qIEFy
cmF5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5UmVm
ZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Mzc1LDEyICs5Mzc0LDEw
IEBACiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3QTBENzg2MjIyMDc5MUVEMDBF
QkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwICovLAotCQkJ
CTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5oICovLAotCQkJCTdBRkJEMzY0MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovLAotCQkJCTdBRkJEMzY1MjFFNTFCQUIwMDVE
QkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLywKLQkJCQk3QUNF
ODJFODIyMUNBRTA3MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAq
LywKLQkJCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmggKi8sCisJCQkJNDlDRUI0RkQyNkQ2QzE3NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0Rh
dGUuY3BwICovLAorCQkJCTQ5Q0VCNTAwMjZENkMyMTAwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRl
LmggKi8sCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgKi8sCisJCQkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCTdBNDFFOUZBMjFGODFEQUMwMEI4OENE
QiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCAqLywKIAkJCQk3QTNGRUNBMTIxRjdD
MDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5oICovLAogCQkJCTdBODQzQTFBMjFF
NDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLApA
QCAtMTIyNDgsNiArMTIyNDUsNyBAQAogCQkJCTM3NTRENTQ1MUIzQTI5RkQwMDNBNEM3RiAvKiBO
U0ludm9jYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxREQ3MkFCMjY4MjE2NzMwMEE5
MEM3MSAvKiBOV1BhcmFtZXRlcnNTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEFDQTEzMTY2
NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGguaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5
Q0VCNTAxMjZENkMyMkUwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNEVCNEFGRDI2OUNEN0YzMDBEMjk3QUUgLyogT1NTdGF0ZVNQSS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3Njc4QiAvKiBQYWdlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTEyMzc1LDcgKzEyMzczLDYgQEAKIAkJCQk1Q0I3QUZFNzIzQzY4MjA3
MDBFNDlDRjMgLyogUmVzb3VyY2VMb2FkSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkJFOTY5
Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFFNTRENENGMDA4Qjc0ODMgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJN0FGQkQz
NjcyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMDA2NkUxMTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNp
dmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMDQ4MkNFMURERDMyNEYwMEYwMDZE
MCAvKiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkYzOEU4QzI0MTZFNjczMDA1
OTM3NUEgLyogUnVubmluZ0JvYXJkU2VydmljZXNTUEkuaCBpbiBIZWFkZXJzICovLApAQCAtMTQy
NjQsNiArMTQyNjEsNyBAQAogCQkJCTJEOTEzNDQ3MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRp
bWVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDgyMTJDRjlGMDAwMTI4
QUZEIC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkyQTc5
NDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBWYXJpYW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0OUNFQjRGRTI2RDZDMTc3MDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUEyQTFDQkVC
NjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTEzNDQ5MjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVn
aW4uY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="commit-queue"
          id="459465"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436431</attachid>
            <date>2021-08-25 15:14:09 -0700</date>
            <delta_ts>2021-08-25 15:58:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229512-20210825151408.patch</filename>
            <type>text/plain</type>
            <size>545631</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYwYzkwNDkwMTU1MzA0M2I1
YTIzNjAwMDU3ZWQzZjNiODcyNDRhZjYuLjhmYjQ5YTQwNjRkOTcxZGFlMDBiZTFkMDA1MDc3NGM0
OWY3MDExYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMwIEBACisyMDIxLTA4LTI1ICBLYXRlIENo
ZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBJVFAgbWVtb3J5IHN0b3JlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTUxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzA3
NDMyNTg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFBDTSBhbmQgSVRQIGxheW91dCBhbmQg
QVBJIHRlc3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgYW5kIG1lcmdlcworICAgICAgICBmdW5jdGlvbnMgZnJvbSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSB3aXRoIGl0cyBwYXJlbnQKKyAgICAgICAg
Y2xhc3MgdG8gaGF2ZSBhIHNpbmdsZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3Mu
CisKKyAgICAgICAgSSB0b29rIHRoaXMgY2hhbmNlIHRvIGFsc28gdHJ5IGFuZCBiZXR0ZXIgb3Jn
YW5pemUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBoZWFkZXIgZmls
ZSB0byBjbHVtcCByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlci4gQW5kLCBJIHJlbW92ZWQgc29t
ZQorICAgICAgICB1bnVzZWQgZnVuY3Rpb25zIEkgZm91bmQgd2hlbiBtaWdyYXRpbmcuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL09wZXJhdGluZ0RhdGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRl
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgTW92ZSBPcGVyYXRpbmdEYXRlIGNvZGUgdG8g
aXRzIG93biBmaWxlIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mCisgICAgICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEpOgor
ICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToK
KyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAg
KFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Om5l
ZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpvcGVuSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNj
aGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlz
c2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVkU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6aW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmludGVycnVwdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlVW5pcXVlSW5k
aWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3Jl
YXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpkZXN0cm95U3RhdGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZUFu
ZE1ha2VEb21haW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0
aWMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdl
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OmpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0VGhp
cmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6aGFzQmVlblRoaXJkUGFydHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpbmROb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFj
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFsbERvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0
S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4
cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxC
dXRDb29raWVzRm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3Ry
YWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUxhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OmFwcGVuZEJvb2xlYW4pOgorICAgICAgICAo
V2ViS2l0OjphcHBlbmROZXh0RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGlj
U3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRp
c3RpY3NFeHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlVW5hdHRyaWJ1dGVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphdHRyaWJ1dGVQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJTZW50QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0YW5kYWxvbmVB
cHBsaWNhdGlvbkRvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhck9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6d29ya1F1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om1vbnRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6bW9udGhEYXkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdE
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc01lbW9yeVN0b3Jl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc0RhdGFiYXNlU3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9y
eVN0b3JlRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlQ29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VzcGVuZCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om1vbnRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
bW9udGhEYXkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRp
bmdEYXRlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0wOC0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFtSQlNUYXJnZXQgdGFyZ2V0V2l0aFBpZDpd
IGR1cmluZyBXZWJQcm9jZXNzUHJveHk6OnNodXREb3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDdmNWIxOTI0MzNlY2FjYjEwMDNhYmQzNWYxMzU0MzViYTE2YWVhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9PcGVyYXRp
bmdEYXRlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wZXJhdGluZ0RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOworICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKK30KKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkp
OworfQorCitTZWNvbmRzIE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9u
dGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0Rh
dGU6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVy
Lm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdE
YXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwor
fQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlOGQyZGIzYzc1ZDljYjJkNjg3YjI1YjlhZWJl
MDBjMjBjOWZiMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0NvbnNvbGVUeXBlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNj
ZXNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
R2VzdHVyZUluZGljYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBJVFBfUkVMRUFTRV9MT0coc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBJVFBfUkVM
RUFTRV9MT0dfRVJST1Ioc2Vzc2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQotCi0vLyBDT1VOVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBv
YnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWRE
b21haW5zIl9zOwotY29uc3RleHByIGF1dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVy
eSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Ci1j
b25zdGV4cHIgYXV0byBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3Vi
cmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0
ZXhwciBhdXRvIGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0ZXhwciBhdXRv
IGNvdW50UHJldmFsZW50UmVzb3VyY2VzUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJl
Z2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9
IDE7Il9zOwotY29uc3RleHByIGF1dG8gY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWlu
KSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDE7Il9zOwotCi1jb25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1Qg
cmVnaXN0cmFibGVEb21haW4pIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMDsiX3M7Ci0KLS8vIElOU0VSVCBPUiBJR05P
UkUgUXVlcmllcwotY29uc3RleHByIGF1dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJ
TlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2Vlbiwg
aGFkVXNlckludGVyYWN0aW9uLCIKLSAgICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUs
IGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIK
LSAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9t
YWluUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChk
b21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50
byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxl
RG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUg
aW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50IChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZy
b21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURv
bWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVn
aXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBpbiAoICJfczsKLQotLy8gSU5TRVJUIE9SIFJFUExBQ0UgUXVlcmllcwotY29uc3RleHBy
IGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBM
QUNFIGludG8gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwg
bGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyB3aGVyZSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKLWNvbnN0
ZXhwciBhdXRvIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0
VXBkYXRlZCwgZnJvbURvbWFpbklEKSBTRUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0
byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFp
bklELCBsYXN0VXBkYXRlZCwgdG9wRnJhbWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwot
Y29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VS
VCBPUiBSRVBMQUNFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3Vy
Y2VEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsK
LWNvbnN0ZXhwciBhdXRvIGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwg
IgotICAgICJzb3VyY2VJRCwgdGltZU9mQWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQp
IFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3M7Ci1jb25zdGV4cHIgYXV0byBpbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFD
RSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFp
bklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgotICAgICJzb3VyY2VJRCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSwgcHJpb3JpdHksIHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
LQotLy8gRVhJU1RTIFF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCi0gICAg
IkFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMg
KFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCi0gICAgIldI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVD
VCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gIgotICAgICJBTkQgdG9E
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Ci1jb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCi0gICAgIkFO
RCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVM
b2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURv
bWFpbklEID0gPyAiCi0gICAgIkFORCBzdWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKLWNvbnN0ZXhwciBhdXRvIHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJ
U1RTIChTRUxFQ1QgMSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVS
RSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotCi0v
LyBVUERBVEUgUXVlcmllcwotY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9
ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKLSAgICAiV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVy
eSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1v
dmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVk
ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byB1cGRh
dGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlz
UHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIg
YXV0byB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ZlcnlQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9
IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRl
R3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRv
IHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byBz
ZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQ
REFURSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGlj
ayA9IC0xLjAiX3M7Ci1jb25zdGV4cHIgYXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVy
eSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBB
TkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gbWFya1Jl
cG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVs
bCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCA9ID8iX3M7Ci0KLS8vIFNFTEVDVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBkb21haW5JREZy
b21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzUHJldmFs
ZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBh
dXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJl
ZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIDwgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFYKGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVw
ZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9t
YWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyJfcwotICAgICJVTklPTiBBTEwgU0VM
RUNUIGxhc3RVcGRhdGVkIEZST00gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRv
RG9tYWluSUQgPSA/IGFuZCBmcm9tRG9tYWluSUQgPSA/IgotICAgICJVTklPTiBBTEwgU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCi0gICAgIlVO
SU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7
Ci1jb25zdGV4cHIgYXV0byBnZXRBbGxEb21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxl
RG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOwotY29uc3RleHByIGF1dG8gZ2V0QWxsU3Vi
U3RhdGlzdGljc1VuZGVyRG9tYWluUXVlcnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IgotICAgICJVTklPTiBBTEwgU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgotICAg
ICJVTklPTiBBTEwgU0VMRUNUIHRvRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8g
YWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOwot
Y29uc3RleHByIGF1dG8gYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkg
PSAiU0VMRUNUICosIE1JTihlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1l
VG9TZW5kVG9EZXN0aW5hdGlvbikgYXMgbWluVmFsICIKLSAgICAiRlJPTSBBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMg
Tk9UIE5VTEwgQU5EIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwg
IgotICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFz
IG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIElTIE5VTEwgIgotICAgICJVTklPTiBBTEwgU0VM
RUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlIElTIE5VTEwgT1JERVIgQlkgbWluVmFsIl9zOwotY29uc3RleHByIGF1dG8gZmluZFVu
YXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25T
aXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBz
b3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7
Ci1jb25zdGV4cHIgYXV0byBlYXJsaWVzdFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlLCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21h
aW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotLy8gRVhJU1RT
IGZvciB0ZXN0aW5nIHF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3Rz
UXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0
aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5JRCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzY3JpcHRMb2FkRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1l
RG9tYWluSUQgPSA/IE9SIHN1YnJlc291cmNlRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBh
dXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9S
IHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhp
c3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1l
RG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVl
cnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJf
czsKLWNvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBF
WElTVFMgKFNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyki
X3M7Ci0KLS8vIERFTEVURSBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVl
cnkgPSAiREVMRVRFIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsK
LWNvbnN0ZXhwciBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRR
dWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBX
SEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgTElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
IExJS0UgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkgPSAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRl
RG9tYWluSUQgTElLRSA/Il9zOwotY29uc3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBXSEVSRSA/ID4gdGltZU9mQWRDbGljayJfczsKLWNvbnN0ZXhwciBhdXRv
IHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2
ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9tYWlucyAoIgotICAgICJkb21haW5J
RCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCi0gICAgImhh
ZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIK
LSAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVH
RVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKLSAgICAi
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9U
IE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5U
RUdFUiBOT1QgTlVMTCwiCi0gICAgImlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7Ci0KLWVudW0gewotICAgIERvbWFpbklESW5kZXgsCi0g
ICAgUmVnaXN0cmFibGVEb21haW5JbmRleCwKLSAgICBMYXN0U2VlbkluZGV4LAotICAgIEhhZFVz
ZXJJbnRlcmFjdGlvbkluZGV4LAotICAgIE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5k
ZXgsCi0gICAgR3JhbmRmYXRoZXJlZEluZGV4LAotICAgIElzUHJldmFsZW50SW5kZXgsCi0gICAg
SXNWZXJ5UHJldmFsZW50SW5kZXgsCi0gICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAotICAg
IElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxJbmRleAotfTsKLQotY29uc3Rl
eHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERv
bWFpbnMgKCIKLSAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05T
VFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgotICAgICJS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OwotICAgIAotY29uc3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zID0gIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
KCIKLSAgICAiZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKLSAgICAiQ09OU1RSQUlOVCBma0RvbWFp
bklEIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAgICAi
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBL
RVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAo
IgotICAgICJzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5D
RVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgotICAgICJG
T1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoIgotICAgICJ0YXJnZXREb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
LCAiCi0gICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8g
Y3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFt
ZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIKLSAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgIgotICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkoZnJv
bURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzICgiCi0gICAgInRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3Vy
Y2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvcEZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVO
Q0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1j
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFU
RSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCi0gICAgInN1YkZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgbGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotICAgIAot
Y29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJD
UkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgotICAgICJzdWJy
ZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5V
TEwsIHRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtF
WShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
KSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAg
ICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFM
IE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBL
RVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7
Ci0gICAgCi1jb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgotICAg
ICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgot
ICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7Ci0KLWNvbnN0ZXhwciBhdXRvIGNyZWF0
ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgotICAgICJ5
ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElO
VEVHRVIgTk9UIE5VTEwpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlE
IElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0
b2tlbiBURVhULCBzaWduYXR1cmUgVEVYVCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNl
U2l0ZURvbWFpbklEKSAiCi0gICAgIlJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklE
KSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQp
IFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50ID0gIkNSRUFURSBUQUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9U
IE5VTEwsICIKLSAgICAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBw
cmlvcml0eSBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIK
LSAgICAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0
dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVB
TCwgIgotICAgICJGT1JFSUdOIEtFWShzb3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMo
ZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotLy8gQ1JFQVRFIFVOSVFVRSBJTkRF
WCBRdWVyaWVzLgotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFp
bklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BM
ZXZlbERvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVY
IElGIE5PVCBFWElTVFMgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudF9zb3VyY2VEb21haW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5J
RCwgdG9Eb21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJ
U1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWlu
SUQgb24gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21E
b21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxp
bmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5
U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c190b3BGcmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQg
b24gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1
YnJlc291cmNlRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3Rv
cEZyYW1lRG9tYWluSUQgb24gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1l
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJy
ZXNvdXJjZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb19zdWJyZXNvdXJjZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3VicmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJv
bURvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGlu
Z0RhdGVzID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRl
c195ZWFyX21vbnRoX21vbnRoRGF5IG9uIE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1v
bnRoRGF5ICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVY
SVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWlu
SURfZGVzdGluYXRpb25TaXRlRG9tYWluSUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICki
X3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlv
blNpdGVEb21haW5JRCBvbiBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3Vy
Y2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Ci0KLS8vIEFkZCBv
bmUgdG8gdGhlIGNvdW50IG9mIHRoZSBhYm92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9y
IHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNh
bGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJlY2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgotY29uc3Qg
aW50IGV4cGVjdGVkSW5kZXhDb3VudCA9IDE0OwotCi1zdGF0aWMgY29uc3QgU3RyaW5nIE9ic2Vy
dmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKQotewotICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERv
bWFpbjsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyBPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVt
YVYxQWx0ZXJuYXRlKCkKLXsKLSAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9t
YWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBU
RVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBO
VUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBO
VUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1Qg
TlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5V
TEwpIl9zOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZFVuYXR0
cmlidXRlZENvbHVtbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAi
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2si
X3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwotICAgIHJldHVybiBj
b2x1bW5zLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhIl9zLCAicHJpb3JpdHkiX3MsICJ0aW1lT2ZBZENsaWNrIl9zLCAiZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2UiX3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlE
Il9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiJfcyB9KTsKLSAgICByZXR1cm4g
Y29sdW1ucy5nZXQoKTsKLX0KLQotc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVhdGVUYWJsZVNjaGVt
YShjb25zdCBTdHJpbmcmIHNjaGVtYSkKLXsKLSAgICByZXR1cm4gc2NoZW1hLmNvbnRhaW5zKCJS
RUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwotfQotCi1zdGF0aWMgU3RyaW5nIHN0cmlwSW5k
ZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjb25zdCBjaGFyKiBvcmlnaW5hbFF1ZXJ5KQotewot
ICAgIHJldHVybiBTdHJpbmcob3JpZ2luYWxRdWVyeSkucmVwbGFjZSgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIiwgIkNSRUFURSBVTklRVUUgSU5ERVgiKTsKLX0KLQotc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFRh
YmxlQW5kSW5kZXhQYWlyPiYgZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpCi17Ci0gICAg
c3RhdGljIGF1dG8gZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBUYWJs
ZUFuZEluZGV4UGFpcj4gewotICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIHN0ZDo6bWFr
ZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVPYnNlcnZlZERvbWFp
biwgc3RkOjpudWxsb3B0KSB9LAotICAgICAgICB7ICJUb3BMZXZlbERvbWFpbnMiX3MsIHN0ZDo6
bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BMZXZlbERv
bWFpbnMsIHN0ZDo6bnVsbG9wdCkgfSwKLSAgICAgICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4
UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMpKSB9LAotICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3Jl
ZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykpIH0sCi0g
ICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+
PihjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
KSkgfSwKLSAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRl
VW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJU
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHN0
cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIH0sCi0gICAgICAgIHsgIlRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJp
bmc+PihjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzKSkgfSwKLSAgICAgICAgeyAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9y
ZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9
LAotICAgICAgICB7ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIH0sCi0gICAg
ICAgIHsgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0
cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgfSwKLSAgICAgICAgeyAiU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJPcGVyYXRpbmdEYXRlcyJfcywg
c3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZU9wZXJh
dGluZ0RhdGVzLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVl
SW5kZXhPcGVyYXRpbmdEYXRlcykpIH0sCi0gICAgICAgIHsgIlVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIHN0cmlw
SW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfSwKLSAgICAgICAgeyAiQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPj4oY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB9Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIGV4
cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotc3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgQ29udGFpbmVyVHlwZSYg
dmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGlj
X3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUodmFsdWUpPj4pCi0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHko
KSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLX0KLQotSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZSo+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsU3RvcmVz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKj4+
IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1
ZSwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi0g
ICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSwgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCkKLSAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCAib2JzZXJ2
YXRpb25zLmRiIl9zKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24obV9kYXRhYmFzZSkKLSAgICAsIG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIGVuYWJsZUZvcmVp
Z25LZXlzKCk7Ci0KLSAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3b3JrZXJRdWV1ZSwgdGhl
IHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQgYnkgZGlmZmVyZW50IHRo
cmVhZHMuCi0gICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0gICAgCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCi0gICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsK
LSAgICBhbGxTdG9yZXMoKS5hZGQodGhpcyk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoKQotewot
ICAgIGNsb3NlKCk7Ci0gICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbG9zZSgpCi17Ci0gICAgZGVzdHJv
eVN0YXRlbWVudHMoKTsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQotewotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lzTmV3UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19M
T0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
YXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01B
IGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOwotICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwgc2V0
QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNOZXdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
U2NoZW1hKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1zdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZScgYW5kIHRibF9uYW1lPT8iX3MpOwotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
cHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkua2V5cygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdU
YWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMs
IHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5k
KFN0cmluZyh0YWJsZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsK
LSAgICB9Ci0gICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIG1pc3NpbmdUYWJsZXM7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKLXsK
LSAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOwotICAgIGlmICghZW5hYmxlRm9yZWlnbktl
eXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsK
LSAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0/IEFORCB0eXBl
ID0gJ3RhYmxlJyJfcyk7Ci0gICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9
IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhR
dWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0
YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2No
ZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdl
dFRhYmxlU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwotCi0gICAgYXV0byBnZXRJbmRleFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlwZSA9ICdpbmRleCciX3MpOwotICAgIGlm
ICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldEluZGV4U3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0
YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3Ry
aW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsKLSAgICAgICAgaWYgKCFyYXdJ
bmRleC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwotICAgIH0KLQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4o
V1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRleCkpOwotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFNjaGVtYSgpCi17Ci0gICAgYXV0byBjdXJyZW50U2NoZW1hID0gY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKCJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpLmZpcnN0OwotCi0gICAgaWYgKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSAmJiBjdXJyZW50
U2NoZW1hICE9IGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKLXsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7Ci0gICAg
aWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRp
Y2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJy
b3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmIChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3Np
bmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpCi17Ci0gICAgLy8gQ2hlY2sgYSB0YWJsZSBm
b3IgYSByZWZlcmVuY2UgdG8gVG9wTGV2ZWxEb21haW5zLCBhIHNpZ24gb2YgdGhlIG9sZCBzY2hl
bWEuCi0gICAgYXV0byBvbGRTY2hlbWEgPSBjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8iX3MpLmZpcnN0OwotICAgIHJldHVybiBuZWVkc05ld0Ny
ZWF0ZVRhYmxlU2NoZW1hKG9sZFNjaGVtYSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFNjaGVtYSgpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBvdGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUg
dG8gdXBncmFkZXMuCi0gICAgLy8gQWxsIG90aGVyIHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0
ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRoZXkgYXJlIGNvcnJlY3QuCi0gICAgaWYgKG1p
c3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlzc2luZ1VuaXF1ZUluZGljZXMoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFu
ZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBVTlVTRURfUEFSQU0odGFibGUpOwot
ICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBl
Y3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGlu
c2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCi17Ci0gICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1
YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRlZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBf
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBHUk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0
b3BGcmFtZURvbWFpbklEIl9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBz
dWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZS
T00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VE
b21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7Ci0KLSAgICBpZiAodGFibGUgPT0gIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxhc3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9N
IF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWlu
SUQsIHRvRG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklE
LCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWluSUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQsIGZyb21Eb21haW5JRCJfcyk7Ci0KLSAgICBp
ZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKLSAgICAg
ICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFTEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRl
c3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJRCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tl
biwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
Il9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJ
TlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJp
Z2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9mQWRDbGljayksIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAg
Qlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcyk7Ci0KLSAg
ICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJU
IElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJTkNUICogRlJPTSBfIiwgdGFibGUpKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoIW5lZWRzVXBkYXRlZFNjaGVtYSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3Rl
ZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAgIGF1dG8gYWx0ZXJUYWJs
ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiQUxURVIgVEFC
TEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJsZSkpOwotICAgICAgICBpZiAoIWFsdGVy
VGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY3JlYXRlU2NoZW1hKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBhdXRvIG1pZ3JhdGVUYWJs
ZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
dGFibGUpOwotICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0
YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdyYXRlIHNjaGVtYSwg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUpKTsKLSAgICAg
ICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3Nh
Z2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghY3JlYXRlVW5pcXVlSW5kaWNlcygpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1
bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0g
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VT
dHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7Ci0KLSAgICBpZiAo
IXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21UYWJsZUlu
Zm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnM7
Ci0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpOwotICAgICAgICBjb2x1bW5zLmFw
cGVuZChuYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxl
KFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBleGlzdGluZ0NvbHVt
bnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQotewotICAgIEFTU0VS
VChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0g
ICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKLSAgICAgICAgaWYgKGV4
aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwotICAgICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRp
bmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgfQotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9
ICJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKLSAgICBjb25zdCBhdXRv
IGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
Il9zOwotCi0gICAgYWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFt
ZSwgY29sdW1uc0ZvclRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRy
aWJ1dGVkQ29sdW1ucygpKTsKLSAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRl
ZFRhYmxlTmFtZSwgY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhp
c3RpbmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUm
JiBleHBlY3RlZENvbHVtbk5hbWUpCi17Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3Rl
ZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1
bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEF0
dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgotICAgIGNvbnN0IGF1dG8g
YXR0cmlidXRlZFRhYmxlTmFtZSA9ICJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3M7Ci0gICAgY29uc3QgYXV0byBvbGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4gPSAiZWFybGll
c3RUaW1lVG9TZW5kIl9zOwotICAgIGNvbnN0IGF1dG8gbmV3RWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zOwotICAgIGNvbnN0IGF1dG8gb2xk
QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbiA9ICJhdHRyaWJ1dGVPblNpdGVEb21haW5JRCJf
czsKLSAgICBjb25zdCBhdXRvIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3M7Ci0gICAgY29uc3QgYXV0byBmb3VuZEF0dHJpYnV0ZWRU
YWJsZUNvbHVtbnMgPSBjb2x1bW5zRm9yVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSk7Ci0KLSAg
ICBpZiAoZm91bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zLmNvbnRhaW5zKG9sZEVhcmxpZXN0VGlt
ZVRvU2VuZENvbHVtbikpCi0gICAgICAgIHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRh
YmxlTmFtZSwgb2xkRWFybGllc3RUaW1lVG9TZW5kQ29sdW1uLCBuZXdFYXJsaWVzdFRpbWVUb1Nl
bmRDb2x1bW4pOwotCi0gICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlu
cyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKSkKLSAgICAgICAgcmVuYW1lQ29sdW1u
SW5UYWJsZShhdHRyaWJ1dGVkVGFibGVOYW1lLCBvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uLCBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKTsKLQotICAgIC8vIFVuYXR0cmli
dXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGNhc2UuCi0gICAgYXV0byB1bmF0dHJpYnV0
ZWRUYWJsZU5hbWUgPSAiVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3M7Ci0g
ICAgYXV0byBmb3VuZFVuYXR0cmlidXRlZFRhYmxlQ29sdW1ucyA9IGNvbHVtbnNGb3JUYWJsZSh1
bmF0dHJpYnV0ZWRUYWJsZU5hbWUpOwotCi0gICAgaWYgKGZvdW5kVW5hdHRyaWJ1dGVkVGFibGVD
b2x1bW5zLmNvbnRhaW5zKG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4pKQotICAgICAg
ICByZW5hbWVDb2x1bW5JblRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRp
b25EZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdU
YWJsZXNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgYXV0byBtaXNzaW5nVGFibGVzID0gY2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKLSAgICBpZiAoIW1pc3NpbmdUYWJsZXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewotICAg
ICAgICBhdXRvIGNyZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkuZ2V0KHRhYmxlKS5maXJzdDsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kU2xvdyhjcmVhdGVUYWJsZVF1ZXJ5KSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdUYWJsZXMgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5B
bmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCi17Ci0gICAgb3BlbklUUERhdGFiYXNlKCk7Ci0g
ICAgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7Ci0gICAgICAgIGlmICghc3Rh
dGVtZW50KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJs
ZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0
ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwotICAgICAgICAg
ICAgY2xvc2UoKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdl
RGlyZWN0b3J5UGF0aCk7Ci0gICAgICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGUgT2JzZXJ2ZWREb21haW5zIHNjaGVtYSBpbiB0aGUg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkaXJlY3RvcnkgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVt
YSwgZGVsZXRlIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgIC8vIEZJWE1FOiBNaWdyYXRlIG9sZCBP
YnNlcnZlZERvbWFpbnMgZGF0YSB0byBuZXcgdGFibGUgc2NoZW1hLgotICAgIGlmIChjdXJyZW50
U2NoZW1hICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKSAmJiBjdXJyZW50U2NoZW1h
ICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUoKSkgewotICAgICAgICBj
bG9zZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURpcmVjdG9y
eVBhdGgpOwotICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFJlbmFtaW5nIGFuZCBhZGRpbmcgY29sdW1ucyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgbWlncmF0aW5nIHRvIGF2b2lkIG1pc21hdGNoZWQgb3IgbWlzc2luZyBjb2x1bW5zLgot
ICAgIHJlbmFtZUNvbHVtbnNJZk5lY2Vzc2FyeSgpOwotICAgIGFkZE1pc3NpbmdDb2x1bW5zSWZO
ZWNlc3NhcnkoKTsKLSAgICBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLX0K
LQotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmlu
ZyYgbG9nU3RyaW5nKSBjb25zdAotewotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgIGF1
dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVl
cnkpOwotICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9Owot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1l
bnQuZ2V0KCkgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW50ZXJydXB0KCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
bV9kYXRhYmFzZS5pbnRlcnJ1cHQoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNv
dW50UXVlcnksICJpc0VtcHR5Il9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc0VtcHR5IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOwotfQotCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzKCkKLXsK
LSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykK
LSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KQot
ICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pCi0g
ICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9w
RnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KQotICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCi0gICAgICAgIHx8ICFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VW5pcXVlSW5kZXhPcGVyYXRpbmdEYXRlcykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2JzZXJ2ZWREb21haW4pKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wTGV2ZWxEb21haW5zKSkgewotICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudCB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNy
ZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZUxv
YWRlZFRoaXJkUGFydHlTY3JpcHRzKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPcGVyYXRpbmdEYXRlcykpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9wZXJhdGluZ0RhdGVzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgewot
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkZXN0cm95U3RhdGVtZW50cygpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX29ic2VydmVkRG9tYWluQ291bnRTdGF0ZW1l
bnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQgPSBudWxs
cHRyOwotICAgIG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0
cjsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZUlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3RvcEZyYW1lTGlu
a0RlY29yYXRpb25zRnJvbUV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV90b3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvdW50UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2NvdW50
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVt
ZW50ID0gbnVsbHB0cjsKLSAgICBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2dldEFsbFN1YlN0YXRpc3RpY3NTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fc3RvcmFnZUFj
Y2Vzc0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9nZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2xpbmtEZWNvcmF0aW9uRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fb2JzZXJ2ZWREb21haW5zRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZUFsbERhdGFTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1faW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRT
dGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NldFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2Ns
ZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2ZpbmRV
bmF0dHJpYnV0ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RUaW1lVG9T
ZW5kU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCA9IG51bGxwdHI7Ci0gICAgbV9tYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCA9IG51bGxwdHI7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbklEKGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGRvbWFpbnMgbm90
IGluIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudCwgaW5zZXJ0
T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydE9ic2VydmVkRG9tYWluIl9zKTsKLSAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91
YmxlKExhc3RTZWVuSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsIGxvYWRTdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChHcmFu
ZGZhdGhlcmVkSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwg
bG9hZFN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgbG9hZFN0
YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIGxvYWRT
dGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nl
c3NBUElJbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
U3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGxv
YWRTdGF0aXN0aWNzLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291cmNlKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWRE
b21haW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiBzdGF0ZW1lbnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFm
aXJzdERvbWFpbklEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXN0YXRlbWVudAotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKmZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHNlY29uZERvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4u
c3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5JbnQoMCk7Ci19Ci0KLVN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbkxpc3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKLSAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQotICAgICAgICBpZiAoZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVSZXNvdXJjZSkuc2Vjb25kKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsICciJywgdG9wRnJhbWVSZXNv
dXJjZS5zdHJpbmcoKSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQot
ewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7Ci0gICAgCi0gICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKLSAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0Ui
KSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91Ymxl
KDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSykgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFp
bklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICAKLSAgICBpZiAoIXJl
Z2lzdHJhYmxlRG9tYWluSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFi
bGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlv
bnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwg
cmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVyeSwgbG9hZFN0YXRpc3Rp
Y3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0cmFibGVEb21haW5JRC52
YWx1ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlJiBtZW1vcnlTdG9yZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICghaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5z
YWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8m
IHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRhKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCi0gICAgLy8gY2FuIHJlZmVyIHRvIHRo
ZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMg
OiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKHN0YXRpc3RpYyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVu
dC0+Y29sdW1uVGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4KTsKLSAgICBhdXRvIGN1cnJlbnRM
YXN0U2VlbiA9IGN1cnJlbnQtPmNvbHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKLSAgICBhdXRv
IGN1cnJlbnRNb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gY3VycmVudC0+Y29sdW1uRG91Ymxl
KE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgpOwotICAgIGJvb2wgY3VycmVudEdy
YW5kZmF0aGVyZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KTsKLSAg
ICBib29sIGN1cnJlbnRJc1ByZXZhbGVudCA9IGN1cnJlbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KTsKLSAgICBib29sIGN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpOwotICAgIHVuc2lnbmVkIGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgp
OwotICAgIGJvb2wgY3VycmVudElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwg
PSBjdXJyZW50LT5jb2x1bW5JbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bEluZGV4KTsKLQotICAgIEFTU0VSVChjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPT0gb3RoZXIu
cmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOwotCi0gICAgaWYgKFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhjdXJyZW50TGFzdFNlZW4pIDwgb3RoZXIubGFzdFNlZW4pCi0gICAgICAgIHVwZGF0
ZUxhc3RTZWVuKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCBvdGhlci5sYXN0U2Vlbik7Ci0KLSAg
ICBpZiAoIW90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICAvLyBJZiBtb3N0IHJl
Y2VudCB1c2VyIGludGVyYWN0aW9uIHRpbWUgaGFzIGJlZW4gcmVzZXQgZG8gc28gaGVyZSB0b28u
Ci0gICAgICAgIGlmICghb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVnaXN0cmFibGVEb21haW4sIGZhbHNl
LCB7IH0pOwotICAgIH0gZWxzZQotICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVn
aXN0cmFibGVEb21haW4sIHRydWUsIHN0ZDo6bWF4KFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhj
dXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIG90aGVyLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKSk7Ci0KLSAgICBpZiAob3RoZXIuZ3JhbmRmYXRoZXJlZCAmJiAhY3VycmVu
dEdyYW5kZmF0aGVyZWQpCi0gICAgICAgIHNldEdyYW5kZmF0aGVyZWQob3RoZXIucmVnaXN0cmFi
bGVEb21haW4sIHRydWUpOwotICAgIGlmIChvdGhlci5pc1ByZXZhbGVudFJlc291cmNlICYmICFj
dXJyZW50SXNQcmV2YWxlbnQpCi0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBpZiAob3RoZXIuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQpCi0gICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgaWYgKG90aGVyLmRhdGFSZWNvcmRz
UmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVjb3Jkc1JlbW92ZWQpCi0gICAgICAgIHVwZGF0ZURhdGFS
ZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNS
ZW1vdmVkKTsKLSAgICBpZiAob3RoZXIuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVz
b3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQot
ICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgc3RhdGlzdGljKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0g
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAibWVyZ2VTdGF0aXN0aWMiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptZXJnZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMg
bm90IGZvdW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQo
KSwgc3RhdGlzdGljKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0
YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0
YXRpc3RpY3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbikpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW5z
ZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzIGlu
c2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0
aXN0aWMoc3RhdGlzdGljKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBm
b3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28gd2UKLSAgICAvLyBjYW4gcmVmZXIgdG8g
dGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMuCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0
aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRp
c3RpYyk7Ci19Ci0KLXN0YXRpYyBBU0NJSUxpdGVyYWwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0
aW5nKCkKLXsKLSAgICByZXR1cm4gIlNFTEVDVCBkb21haW5JRCwiCi0gICAgICAgICIoY291bnRT
dWJGcmFtZVVuZGVyVG9wRnJhbWUgKyBjb3VudFN1YlJlc291cmNlVW5kZXJUb3BGcmFtZSArIGNv
dW50VW5pcXVlUmVkaXJlY3RUbykgYXMgc3VtICAiCi0gICAgICAgICJGUk9NICggIgotICAgICAg
ICAiU0VMRUNUICIKLSAgICAgICAgICAgICJkb21haW5JRCwgIgotICAgICAgICAgICAgIkNPVU5U
KERJU1RJTkNUIGYudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJGcmFtZVVuZGVyVG9wRnJh
bWUsICIKLSAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCByLnRvcEZyYW1lRG9tYWluSUQpIGFz
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lLCAiCi0gICAgICAgICAgICAiQ09VTlQoRElT
VElOQ1QgdG9Eb21haW5JRCkgYXMgY291bnRVbmlxdWVSZWRpcmVjdFRvICIKLSAgICAgICAgIkZS
T00gIgotICAgICAgICAiT2JzZXJ2ZWREb21haW5zIG8gIgotICAgICAgICAiTEVGVCBKT0lOIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgZiBPTiBvLmRvbWFpbklEID0gZi5zdWJGcmFtZURv
bWFpbklEICIKLSAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zIHIgT04gby5kb21haW5JRCA9IHIuc3VicmVzb3VyY2VEb21haW5JRCAiCi0gICAgICAgICJM
RUZUIEpPSU4gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB1IE9OIG8uZG9tYWluSUQgPSB1
LnN1YnJlc291cmNlRG9tYWluSUQgIgotICAgICAgICAiV0hFUkUgaXNQcmV2YWxlbnQgTElLRSA/
ICIKLSAgICAgICAgImFuZCBoYWRVc2VySW50ZXJhY3Rpb24gTElLRSA/ICIKLSAgICAgICAgIkdS
T1VQIEJZIGRvbWFpbklEKSBPUkRFUiBCWSBzdW0gREVTQzsiX3M7Ci19Ci0KLVZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJz
dFBhcnR5PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21h
aW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4pIGNvbnN0Ci17
Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRB
bGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRBbGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5R
dWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7
Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGlyZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFp
bklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IHRoaXJkUGFydHlEYXRhRm9y
U3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBh
cnR5RG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3Ry
YWJsZURvbWFpblN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQobV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpKTsKLSAgICAgICAgdGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zLmFwcGVuZElmTm90Q29udGFpbnMoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eSB7IGZpcnN0UGFydHlEb21haW4sIGhhc1N0b3JhZ2VBY2Nlc3MoZmlyc3RQYXJ0eURvbWFp
biwgdGhpcmRQYXJ0eURvbWFpbiksIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAodGhp
cmRQYXJ0eURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbikgfSk7Ci0gICAgfQotICAgIHJldHVybiB0
aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7Ci19Ci0KLXN0YXRpYyBi
b29sIGhhc0JlZW5UaGlyZFBhcnR5KHVuc2lnbmVkIHRpbWVzVW5kZXJGaXJzdFBhcnR5KQotewot
ICAgIHJldHVybiB0aW1lc1VuZGVyRmlyc3RQYXJ0eSA+IDA7Ci19Ci0KLVZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7
Ci0gICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpB
bGwgPyAiJSIgOiAiMSI7Ci0gICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKTsKLSAgICBpZiAo
IXNvcnRlZFN0YXRpc3RpY3MKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQo
MSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRp
c3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwotICAgIH0KLSAgICB3
aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkpIHsK
LSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy0+
Y29sdW1uSW50KDApOwotICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVnaXN0
cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhn
ZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7Ci0gICAgICAg
ICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5RGF0
YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGlyZFBh
cnR5RG9tYWluKSB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGhpcmRQYXJ0eURh
dGFMaXN0OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJl
Y29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0
aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNp
Z25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4g
UmV0dXJuaW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci0gICAgfQot
ICAgIAotICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIFN0ZFNldDx1bnNpZ25l
ZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3Mp
OwotICAgIGlmICghZmluZFN1YnJlc291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50
KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmNvbHVtbkludCgwKTsKLSAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbklEKTsKLSAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCi0gICAgICAgICAgICBu
ZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Ci0gICAgfQotCi0gICAg
YXV0byBmaW5kVG9wRnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMCJfcyk7Ci0gICAgaWYgKCFmaW5kVG9wRnJhbWVzCi0gICAgICAgIHx8IGZpbmRUb3BGcmFt
ZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Y29sdW1uSW50KDApOwotICAgICAgICBh
dXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQo
bmV3RG9tYWluSUQpOwotICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKLSAgICAgICAg
ICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKLSAgICB9Ci0K
LSAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5
SWRlbnRpZmllZERvbWFpbnMpCi0gICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4o
ZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNp
dmVDYWxscyk7Ci0KLSAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAg
IGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Vi
cmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgIH0KLQotICAgIGF1dG8g
dG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQg
RlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50
RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKLSAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0
ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8dW5zaWduZWQsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsK
LSAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlz
UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAi
X3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7Ci0gICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1u
VGV4dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOwotICAgICAgICAgICAgcmVz
dWx0cy5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBh
dXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOwotCi0g
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAgICAgICAgICAgIGlmICgh
ZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9
IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0g
ICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAg
ICAgICAgICAgIGlmICghZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52
YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5J
bnQoMSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFp
bklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21h
aW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21h
aW5JRCIpKTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVt
ZW50KSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZG9t
YWluSUQpOwotICAgICAgICAgICAgaWYgKCFkb21haW5JRCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQtPmNvbHVtbkludCgxKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQg
SU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikp
OwotICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7Ci0gICAgICAg
ICAgICBpZiAoIWRvbWFpbklEKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwotICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gbm90VmVyeVByZXZhbGVu
dFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7Ci0gICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
IG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNl
KHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwg
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNv
dXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0
aWMucHJldmFsZW5jZSk7Ci0gICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3Rh
dGlzdGljLnByZXZhbGVuY2UpCi0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgbWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKLSAgICByZWNsYXNzaWZ5UmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJ1
bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1l
RG9tYWluJiBzdWJGcmFtZURvbWFpbikgY29uc3QKLXsKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQs
IHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOwotICAgIHJl
dHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFt
ZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4p
OwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAo
Y29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKLSAgICBjYXNl
IENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25D
b29raWVQb2xpY3k6Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4s
IFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29va2llQWNjZXNzOjpP
bmx5SWZHcmFudGVkOgotICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgotICAgICAgICBicmVhazsK
LSAgICB9OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
c3RvcmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQs
IHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVI
YW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBw
YWdlSUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3Rp
Y3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7Ci0gICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoY29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURv
bWFpbikpIHsKLSAgICBjYXNlIENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oSVRQRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIg
UFJJVkFURV9MT0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlv
biBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltJVFBdIENhbm5v
dCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwg
Iicgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
X3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNz
U3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OgotICAgICAgICBpZiAoVU5MSUtFTFko
ZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkg
c3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBmcm9tIHNldHRpbmcgY29va2llcy4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZl
bDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgc2luY2UgaXRzIGNvb2tpZXMg
YXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVu
ZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkgc3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBm
cm9tIHNldHRpbmcgY29va2llcy4iX3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRs
ZWQgYmVsb3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGF1dG8gdXNlcldhc1Byb21w
dGVkRWFybGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOwotICAgIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8pIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0
aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBB
Ym91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBh
Y2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVyICciX3MsIHRv
cEZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBvciBub3QuIl9zKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJv
bXB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKElUUERlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJSIgUFJJ
VkFURV9MT0dfU1RSSU5HICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltJVFBdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICciX3MsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLCAiJyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicuIl9z
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRv
bWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCi0gICAgICAg
IHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNl
Y29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29w
ZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKLXsK
LSAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKLSAgICB9Ci0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFp
biYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0
b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmIChwcm9tcHRXYXNTaG93biA9PSBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewotICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVE
b21haW4pOwotICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgewotICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOwotICAgIH0KLQotICAgIGdyYW50
U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21h
aW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVy
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1l
RG9tYWluKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkOjpZZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByb21wdFdhc1No
b3duTm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0g
ICAgICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
LSAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSA9PSBTdG9yYWdlQWNjZXNz
UHJvbXB0V2FzU2hvd246Olllcyk7Ci0jZW5kaWYKLSAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KHN1YkZyYW1lRG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHNjb3BlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVE
b21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHNjb3BlLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RvcmVdKFN0b3JhZ2VBY2Nl
c3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3YXNHcmFudGVkLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlu
cyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLVZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURv
bWFpbnNUb0Jsb2NrOwotICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDIpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7
Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBw
ZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7Ci0KLSAgICBpZiAoIWRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOwotICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
Ci0gICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKLQotICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAl
IiBQUklWQVRFX0xPR19TVFJJTkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIERpZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpLnN0cmluZygpLCAiJyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iX3MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkLCBi
b29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1l
U2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKLSAgICBib29sIGFyZVRhcmdl
dEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47
Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKLSAgICAgICAgYXV0byB0YXJn
ZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
YXJnZXREb21haW4pOwotICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKLSAgICAg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBkb21haW4iLCB0
aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVMYXN0
U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwot
ICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7Ci0gICAgICAgIGlmIChpc01haW5G
cmFtZSkgewotICAgICAgICAgICAgYm9vbCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gIXdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyICYmIGRl
bGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQgPCBwYXJhbWV0ZXJzKCkubWluRGVsYXlBZnRl
ck1haW5GcmFtZURvY3VtZW50TG9hZFRvTm90QmVBUmVkaXJlY3Q7Ci0gICAgICAgICAgICBpZiAo
aXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVy
YWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFp
bik7Ci0gICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAgICAgICAg
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9
KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0p
LCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xP
R19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xP
R19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVz
c2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3Ry
aW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9t
YWluLnN0cmluZygpLCAiJy4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKLSAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwotICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAg
ICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dC5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFt
ZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCBvZiB0YXJnZXQgb3IgcmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0
aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQp
OwotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxl
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBO
YXZpZ2F0ZWRUb0RvbWFpbiYgdG9Eb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKGZyb21Eb21haW4gIT0gdG9Eb21haW4pOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odG9Eb21haW4pOwotICAgIGlmICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAg
Ci0gICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCi0gICAgICAgIHNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0K
LSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBX
SEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+
YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVy
YWN0aW9uKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
c2V0VXNlckludGVyYWN0aW9uIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFj
dGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBib29sIGRpZEhhdmVQcmV2
aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJh
dGluZ0RhdGVzV2luZG93OjpMb25nKTsKLSAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0
cnVlLCBXYWxsVGltZTo6bm93KCkpOwotCi0gICAgaWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRVc2VySW50
ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKLQotICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYg
KCFyZW1vdmVTdG9yYWdlQWNjZXNzCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJp
bmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQotICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
Ci0gICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KLSAgICB1cGRhdGVDb29raWVCbG9ja2lu
ZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dp
bmRvdykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSwgImhhc0hhZFVzZXJJbnRlcmFj
dGlvbiJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsKLQotICAgIGlm
IChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpKSB7Ci0gICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgotICAgICAgICAvLyBTZXQgdGltZXN0
YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdwotICAgICAgICAvLyBp
dCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgotICAgICAgICBj
bGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7Ci0gICAgICAgIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
LQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7Ci0gICAg
aWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlIGRvbWFpbklEIHNob3VsZCBleGlzdCBidXQgd2FzIG5vdCBm
b3VuZC4iLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQsIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnksICJzZXRQcmV2YWxlbnRSZXNv
dXJjZSJfcyk7Ci0gICAgaWYgKCFzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dAotICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZEludCgxLCAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQs
IHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2Ug
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlIl9zKTsKLSAgICBpZiAobmV3UHJldmFsZW5jZSA9
PSBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCkgewotICAgICAgICBpZiAoIXNjb3Bl
ZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudAotICAgICAgICAgICAgfHwgc2Nv
cGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7Ci0gICAgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJsZURvbWFpbklELCBu
b25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOwotICAgIHNldERvbWFpbnNBc1ByZXZh
bGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxl
bnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoZG9t
YWlucyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmIChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7Ci0gICAgICAgIG1fZGF0
YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRl
bWVudCwgZ2V0QWxsRG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gZG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50
LT5jb2x1bW5UZXh0KDApKTsKLSAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5z
LmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6
XG5cbiIpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgcmVzb3Vy
Y2VUb1N0cmluZyhyZXN1bHQsIGRvbWFpbik7Ci0KLSAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0g
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOwotICAgICAg
ICBmb3IgKGF1dG8gdGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOwotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQudG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlJiBwcmVkaWNhdGVTdGF0ZW1lbnQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoIXByZWRpY2F0ZVN0YXRlbWVudAotICAgICAgICB8fCBwcmVkaWNhdGVT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgaXNQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJuIHByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzVmVyeVByZXZhbGVu
dFJlc291cmNlUXVlcnksICJpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlz
dHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAi
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIl9zKTsKLSAgICByZXR1cm4gcmVsYXRpb25z
aGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0
b3BGcmFtZURvbWFpbik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOwotICAgIHJldHVybiBy
ZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSwgImlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyJfcyk7Ci0gICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhzY29wZWRTdGF0ZW1lbnQs
IGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFs
ZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGF1dG8gc2NvcGVk
U3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSJfcyk7Ci0gICAgCi0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZh
bHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFu
c2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlR3Jh
bmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0R3JhbmRm
YXRoZXJlZCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbiwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxRdWVyeSwgInNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi1TZWNvbmRzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4p
OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5J
RCh0b3BGcmFtZURvbWFpbik7Ci0KLSAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZy
YW1lRG9tYWluSUQpCi0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCB9OwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVz
dGFtcFN0YXRlbWVudCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0
TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIs
ICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDYsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLSAgICB9Ci0gICAgaWYgKHNj
b3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLQot
ICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMCkgfTsK
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgaXNHcmFuZGZh
dGhlcmVkUXVlcnksICJpc0dyYW5kZmF0aGVyZWQiX3MpOwotICAgIHJldHVybiBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBt
YWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFt
ZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNv
bmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGb3IgY29uc2lzdGVu
Y3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9w
IGZyYW1lIGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9t
YWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9
KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi1zdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKLSAgICAgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQKLSAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCAwIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9t
YWluKTsKLSAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKG5ld09ic2VydmF0
aW9uKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgc3Rk
OjpudWxsb3B0IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9t
YWluSUQoZG9tYWluKS52YWx1ZSgpIH07Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCi17Ci0gICAgbV9kYXRhYmFz
ZS5jbGVhckFsbFRhYmxlcygpOwotCi0gICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJEYXRhYmFzZUNvbnRlbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKLXsKLSAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4p
OwotICAgIGlmICghZG9tYWluSURUb1JlbW92ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxs
RGF0YVN0YXRlbWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsRG9t
YWlucygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERvbWFp
bnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImFsbERvbWFpbnMiX3MpOwotICAgIGlm
ICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBkb21haW5zOwotICAgIHdoaWxlIChzY29wZWRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBkb21haW5zLmFwcGVuZChSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNjb3BlZFN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotICAgIHJldHVybiBkb21haW5zOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKLSAgICBjbGVhck9w
ZXJhdGluZ0RhdGVzKCk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIHJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLQotICAgIGF1
dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwgeyB9IH07Ci0gICAgdXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcmVB
bGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pCi17Ci0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9
PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAh
aGFzSGFkVXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRv
dzo6TG9uZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1Db29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tp
ZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpOwotICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21haW4uc3RyaW5n
KCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
LQotICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKLSAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKLQotICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OwotCi0gICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKLX0K
LQotU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFy
dHlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZp
cnN0UGFydHlEb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87Ci0gICAgfQot
Ci0gICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gKnJlc3VsdC5zZWNvbmQ7Ci0K
LSAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRv
bWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghc3RhdGVt
ZW50Ci0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOwotCi0gICAgcmV0dXJuICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPyBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93
bjo6Tm87Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAwIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
IHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJf
cyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIAot
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLUhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00g
KFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVs
RG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElO
TkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5k
b21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04g
ZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVt
blRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8gZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yKCk7Ci0gICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBD
b29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOwotICAg
IGF1dG8gZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpOwotICAgIGF1dG8gZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzID0gdGhpcy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7Ci0KLSAg
ICBpZiAoZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbkFzRmlyc3RQYXJ0eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNj
ZXNzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ig
ZG9tYWluc1RvQmxvY2sgeyBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5LCBkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgfTsKLQotICAgIGlmIChkZWJ1Z0xv
Z2dpbmdFbmFibGVkKCkgJiYgKCFkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNF
bXB0eSgpIHx8ICFkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCi0g
ICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFj
a2luZyByZXN0cmljdGlvbnMiLCBkb21haW5zVG9CbG9jayk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VS
ZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxv
Y2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIHN0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkod2Vha1RoaXMtPmRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0
ZSB0cmFja2luZyByZXN0cmljdGlvbnMuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5kZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sICJbSVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tp
bmcgcmVzdHJpY3Rpb25zLiJfcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1WZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpkb21haW5zKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAKLSAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKLSAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdp
c3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRl
cmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQg
Sk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9t
YWluSUQgPSBkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVy
biByZXN1bHRzOwotICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Y29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29s
dW1uVGV4dCgxKSkKLSAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDIpKQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/
IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVt
ZW50LT5jb2x1bW5JbnQoNikpCi0gICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWluSURzVG9DbGVhcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChkb21haW5JRHNU
b0NsZWFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaXN0VG9DbGVh
ciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKLQotICAgIGF1dG8gY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoIWNsZWFyR3JhbmRm
YXRoZXJpbmdTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVW5leHBp
cmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRhdGEmIHJlc291cmNlU3RhdGlz
dGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLXsKLSAgICBp
ZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NF
eHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBv
cGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKLQotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0
aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCi0gICAgICAgIGlmIChvcGVyYXRpbmdE
YXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykKLSAgICAgICAgICAgIGNs
ZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBb
XSB7IH0pOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
b3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1ib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihj
b25zdCBEb21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nKQotewotICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3Rp
Yy5ncmFuZGZhdGhlcmVkKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiBy
ZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKQotewot
ICAgIGJvb2wgaXNSZW1vdmFsRW5hYmxlZCA9IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlKCkgIT0gRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmUgfHwgcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKLSAgICBi
b29sIGlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkID0gc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkOwotCi0gICAgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cgd2luZG93IHsgfTsKLSAgICBzd2l0Y2ggKGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKCkpIHsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOgotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOgotICAgICAgICB3aW5kb3cgPSBPcGVyYXRp
bmdEYXRlc1dpbmRvdzo6U2hvcnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXNMaXZlT25UZXN0aW5nVGltZW91
dDoKLSAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rp
bmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXNSZXByb1Rlc3RpbmdUaW1lb3V0OgotICAgICAgICB3aW5kb3cg
PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yUmVwcm9UZXN0aW5nOwotICAgIH0KLQotICAgIHJl
dHVybiBpc1JlbW92YWxFbmFibGVkICYmICFpc1Jlc291cmNlR3JhbmRmYXRoZXJlZCAmJiAhaGFz
SGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCB3aW5k
b3cpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91
bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKLXsKLSAgICBpZiAoKCFpc1NhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0
cmljdEZvclNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWlu
KSkKLSAgICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VT
dGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChyZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0
c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKLSAgICAgICAgY2xlYXJUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3Rh
dGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0aWMpCi17Ci0gICAgaWYgKHN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiBz
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7Ci19Ci0KLVJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RX
ZWJzaXRlRGF0YUZvcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKCkgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcp
Ci0gICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwotCi0gICAgYXV0
byBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgYXV0byBvbGRlc3RVc2VySW50ZXJhY3Rpb24g
PSBub3c7Ci0gICAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgdG9EZWxldGVPclJlc3RyaWN0Rm9yOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBWZWN0b3I8RG9tYWluRGF0
YT4gZG9tYWlucyA9IHRoaXMtPmRvbWFpbnMoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFp
bklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IGRv
bWFpbnMpIHsKLSAgICAgICAgaWYgKHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9u
KHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB0aGlzLT5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZShzdGF0aXN0aWMpKQotICAgICAgICAgICAgb2xkZXN0
VXNlckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0VXNlckludGVyYWN0aW9uLCAqbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsV2Vi
c2l0ZURhdGFGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewot
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENvb2tp
ZXNGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgICAgICB0
b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURh
dGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihzdGF0aXN0
aWMsIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgdG9E
ZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgICAg
IHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKLSAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0Vu
YWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIlNjaGVkdWxlZCAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHRvIGhhdmUgaXRzIGNvb2tpZXMg
c2V0IHRvIFNhbWVTaXRlPXN0cmljdC4iLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5m
bywgbWFrZVN0cmluZygiU2NoZWR1bGVkICciLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4u
c3RyaW5nKCksICInIHRvIGhhdmUgaXRzIGNvb2tpZXMgc2V0IHRvIFNhbWVTaXRlPXN0cmljdCcu
IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkKLSAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZy5hcHBlbmQoc3Rh
dGlzdGljLmRvbWFpbklEKTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0
aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUg
d2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93
IC0gb2xkZXN0VXNlckludGVyYWN0aW9uIDwgcGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCkKLSAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNsZWFyKCk7Ci0KLSAgICBjbGVh
ckdyYW5kZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSAwOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5
LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgIGNvdW50ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCk7Ci0KLSAgICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRy
aWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50
cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOwotCi0gICAg
c2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJp
ZXNEb3duVG87Ci0gICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwotCi0gICAgYXV0byByZWNv
cmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2
YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwotICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwg
cmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAg
ICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBl
bnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7Ci0KLSAg
ICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKLQotICAgIGF1
dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRhdGVM
YXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVt
ZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldExhc3RTZWVuIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB1
cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNl
Y29uZHMoKSkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAo
ZG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFByZXZhbGVudFJl
c291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCwgdXBk
YXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnksICJ1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQotewot
ICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChj
b3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwotICAgIAotICAgIGlmICghc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJp
bmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5j
b2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Y29sdW1u
SW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Y29sdW1uSW50KDAp
ID09IDEpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKLXsKLSAgICBidWlsZGVyLmFw
cGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlllcyIgOiAiTm8iKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0
cmluZyYgZW50cnkpCi17Ci0gICAgYnVpbGRlci5hcHBlbmQoIiAgICAgICAgIiwgZW50cnksICdc
bicpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURT
dGF0ZW1lbnQsIGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQuIFN0
YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgIHJlc3VsdCA9IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50LT5jb2x1bW5U
ZXh0KDApOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFTQ0lJTGl0ZXJhbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAotewotICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiAiU0VM
RUNUIHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKLSAg
ICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKLSAgICBpZiAodGFibGVOYW1l
ID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gIlNFTEVD
VCBmcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9E
b21haW5JRCA9ID8iX3M7Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGly
ZFBhcnR5U2NyaXB0cyIpCi0gICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWlu
SUQgZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9t
YWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMiKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20g
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJf
czsKLSAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IikKLSAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCi0g
ICAgICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJs
ZU5hbWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCi0gICAgICAgIHJldHVy
biAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKLSAgICAKLSAgICByZXR1cm4gIiJf
czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5k
U3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgYXV0byBxdWVyeSA9
IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5hbWUpOwotICAgIAotICAgIGlmICghcXVl
cnkubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIGRhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwotICAgIAotICAgIGlmICghZGF0YSB8fCBk
YXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxl
ZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChkYXRhLT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKCIgICAgIiwgdGFibGVOYW1lLCAiOlxuIik7Ci0gICAgCi0gICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Y29sdW1uSW50KDApKTsKLSAgICBh
cHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKLSAgICAKLSAgICB3aGlsZSAoZGF0YS0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEKGRhdGEtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgIGFwcGVuZE5leHRFbnRy
eShidWlsZGVyLCByZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaGFzSGFkUmVjZW50
VXNlckludGVyYWN0aW9uKFdURjo6U2Vjb25kcyBpbnRlcmFjdGlvblRpbWVTZWNvbmRzKQotewot
ICAgIHJldHVybiBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAy
NF9oOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNv
dXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KSBjb25zdAotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LCBnZXRSZXNvdXJjZURh
dGFCeURvbWFpbk5hbWVRdWVyeSwgInJlc291cmNlVG9TdHJpbmciX3MpOwotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9t
YWluKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNvdXJjZVRvU3Ry
aW5nLiBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwg
ZG9tYWluLCAnXG4nKTsKLSAgICAKLSAgICAvLyBVc2VyIGludGVyYWN0aW9uCi0gICAgYXBwZW5k
Qm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFC
eURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbjogIik7Ci0gICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRl
cmFjdGlvbihTZWNvbmRzKG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIndpdGhpbiAyNCBob3VycyIpOwotICAgIGVsc2UKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIi0xIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYXBw
ZW5kQm9vbGVhbihidWlsZGVyLCAiZ3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlE
b21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7Ci0gICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0KLSAgICAvLyBTdG9yYWdlIGFjY2VzcwotICAgIGFwcGVu
ZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyIsIGRvbWFpbik7Ci0KLSAgICAvLyBUb3AgZnJhbWUgc3RhdHMKLSAgICBhcHBlbmRTdWJT
dGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWlu
KTsKLSAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKLSAgICBh
cHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSIsIGRvbWFpbik7Ci0gICAgYXBwZW5kU3ViU3RhdGlzdGlj
TGlzdChidWlsZGVyLCAiVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7
Ci0KLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNv
bHVtbkludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLQotICAgIC8vIFN1YmZyYW1lIHN0YXRzCi0gICAgYXBw
ZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyIsIGRvbWFpbik7Ci0KLSAgICAvLyBTdWJyZXNvdXJjZSBzdGF0cwotICAgIGFwcGVuZFN1YlN0
YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBk
b21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qo
YnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7Ci0KLSAg
ICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UKLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1By
ZXZhbGVudFJlc291cmNlIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChJc1ByZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBt
X2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYnVpbGRlci5h
cHBlbmQoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21h
aW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKLXsK
LSAgICBhdXRvIHNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQsIGxpbmtEZWNvcmF0
aW9uRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UiX3MpOwotICAgIGF1dG8g
c2NvcGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudCht
X3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQsIHNjcmlwdExvYWRFeGlzdHNRdWVyeSwgImRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZSBsaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCJfcyk7Ci0g
ICAgYXV0byBzY29wZWRTdWJGcmFtZUV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRl
bWVudChtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LCBzdWJGcmFtZUV4aXN0c1F1ZXJ5LCAiZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlIHN1YkZyYW1lRXhpc3RzU3RhdGVtZW50Il9zKTsKLSAgICBh
dXRvIHNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQsIHN1YlJlc291cmNlRXhpc3RzUXVlcnks
ICJkb21haW5JREV4aXN0c0luRGF0YWJhc2Ugc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQiX3Mp
OwotICAgIGF1dG8gc2NvcGVkVW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCwgdW5pcXVlUmVk
aXJlY3RFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSB1bmlxdWVSZWRpcmVj
dEV4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgYXV0byBzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQsIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJ
bkRhdGFiYXNlIG9ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgCi0gICAg
aWYgKCFzY29wZWRMaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2Nv
cGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2NvcGVkU3ViRnJhbWVF
eGlzdHNTdGF0ZW1lbnQKLSAgICAgICAgfHwgIXNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVt
ZW50Ci0gICAgICAgIHx8ICFzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudAotICAg
ICAgICB8fCAhc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Ci0gICAgICAgIHx8
IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50LT5i
aW5kSW50KDIsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zY3JpcHRMb2Fk
RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgbV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+YmluZElu
dCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fc3ViRnJhbWVFeGlzdHNT
dGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBt
X3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+YmluZEludCgy
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fdW5pcXVlUmVkaXJlY3RFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4
aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV91bmlxdWVS
ZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwg
bV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc2NyaXB0TG9hZEV4aXN0
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkg
fHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fb2Jz
ZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycygpCi17Ci0gICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOwotICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKLSAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKLQotICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKLQotICAgIGlmICghZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0
ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRp
bmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOwotCi0gICAgaWYg
KCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGgg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJh
dGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9y
dCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBv
ciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNT
aXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCi0gICAgICAgIG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlmIChnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQo
KSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+Y29sdW1uSW50KDIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRv
IHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAobV9vcGVyYXRpbmdEYXRl
c1NpemUgPiAwKSB7Ci0gICAgICAgIGlmICh0b2RheSA8PSBtX21vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0gICAgaW50IHJvd3NUb1By
dW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAx
OwotICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKLSAgICAgICAgYXV0byBkZWxldGVMZWFzdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERh
eSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1
ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGF1
dG8gaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwg
bW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0
b2RheS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycygpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBzd2l0Y2gg
KG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6
TG9uZzoKLSAgICAgICAgaWYgKG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xv
bmdXaW5kb3dPcGVyYXRpbmdEYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgotICAgICAgICBp
ZiAobV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxU
aW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0
aW5nRGF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOgotICAgICAgICByZXR1
cm4gV2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVy
YXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZzsKLSAgICBjYXNlIE9wZXJhdGluZ0RhdGVz
V2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQg
c3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rp
b24gKG1haW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCi17Ci0gICAgLy8gUG9wdWxhdGUgdGhl
IE9wZXJhdGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmlu
Zy4KLSAgICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKLSAg
ICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSku
dmFsdWUoKTsKLSAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKLSAgICAgICAgYXV0byBk
YXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsKLQotICAgICAgICBhdXRvIGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBP
UiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxF
Q1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0
byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQo
KTsKLSAgICB9Ci0KLSAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3Qg
cmVjZW50IG9mIGFsbCBlbnRyaWVzLgotICAgIGRheXNBZ29JblNlY29uZHMgLT0gU2Vjb25kczo6
ZnJvbUhvdXJzKDI0KS52YWx1ZSgpOwotICAgIGF1dG8gc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21h
aW5TdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudCwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nIl9zKTsKLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRUZXh0KFJlZ2lzdHJhYmxlRG9tYWluSW5kZXgsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kRG91YmxlKExhc3RTZWVuSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgaGFzVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCwgZGF5c0Fnb0lu
U2Vjb25kcykgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KEdyYW5kZmF0aGVyZWRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChJc1ByZXZhbGVudEluZGV4LCBpc1ByZXZhbGVudCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCAwKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCogc3RhdGVtZW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byBzb3VyY2VTaXRlRG9tYWluID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDApKTsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChz
dGF0ZW1lbnQtPmNvbHVtbkludCgxKSk7Ci0gICAgYXV0byBzb3VyY2VJRCA9IHN0YXRlbWVudC0+
Y29sdW1uSW50KDIpOwotICAgIGF1dG8gdGltZU9mQWRDbGljayA9IGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0
YXRlbWVudC0+Y29sdW1uRG91YmxlKDUpIDogc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMyk7Ci0g
ICAgYXV0byB0b2tlbiA9IGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg3KSA6
IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg0KTsKLSAgICBhdXRvIHNpZ25hdHVyZSA9IGF0dHJpYnV0
aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg4KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg1
KTsKLSAgICBhdXRvIGtleUlEID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0
KDkpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDYpOwotCi0gICAgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgYXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZUlEKHNvdXJjZUlEKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzb3VyY2VTaXRlRG9tYWluKSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZShSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGRlc3RpbmF0aW9uU2l0ZURvbWFp
bikpLCB7IH0sIHsgfSwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWVPZkFkQ2xpY2spKTsK
LSAgICAKLSAgICBpZiAoYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRpb25U
cmlnZ2VyRGF0YSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpOwotICAgICAgICBhdXRvIHByaW9y
aXR5ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoNCk7Ci0gICAgICAgIGF1dG8gc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg2KTsKLSAgICAgICAg
YXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMTApOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0x
KQotICAgICAgICAgICAgYXR0cmlidXRpb24uc2V0QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgeyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXR0cmlidXRpb25UcmlnZ2VyRGF0YSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpQcmlvcml0eShwcmlvcml0eSkgfSk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25h
bDxXYWxsVGltZT4gc291cmNlRWFybGllc3RUaW1lVG9TZW5kOwotICAgICAgICBzdGQ6Om9wdGlv
bmFsPFdhbGxUaW1lPiBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZDsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJl
ZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgICAgICBpZiAoc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCi0gICAgICAgICAgICBzb3VyY2VFYXJsaWVzdFRpbWVU
b1NlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
VmFsdWUpOwotCi0gICAgICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVl
ID4gMC4wKQotICAgICAgICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7
Ci0KLSAgICAgICAgYXR0cmlidXRpb24uc2V0VGltZXNUb1NlbmQoeyBzb3VyY2VFYXJsaWVzdFRp
bWVUb1NlbmQsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIH0pOwotICAgIH0KLQotICAg
IGF0dHJpYnV0aW9uLnNldFNvdXJjZVNlY3JldFRva2VuKHsgdG9rZW4sIHNpZ25hdHVyZSwga2V5
SUQgfSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRpb247Ci19Ci0KLXN0ZDo6cGFpcjxzdGQ6Om9w
dGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25h
bDxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNv
cmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25z
dCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlv
blNpdGUmIGRlc3RpbmF0aW9uU2l0ZSkKLXsKLSAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKHNvdXJjZVNpdGUucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVE
b21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBz
dGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmlu
ZFVuYXR0cmlidXRlZFF1ZXJ5LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKLSAg
ICBpZiAoIWZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZFVu
YXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
ZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0ZW1lbnQsIGZp
bmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotICAg
IGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZEF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBmaW5kQXR0
cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50PiB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDsKLSAgICBpZiAo
ZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6VW5hdHRy
aWJ1dGVkKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50PiBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci0gICAgaWYgKGZpbmRB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEZyb21EYXRhYmFzZShmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50LCBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1
dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3Ry
YWJsZURvbWFpbik7Ci0KLSAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25kIHx8ICFhdHRyaWJ1dGlv
bkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNv
dXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigp
OwotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdn
ZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0cmlidXRp
b24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6IC0xOwotICAgICAgICBh
dXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0
cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkucHJpb3JpdHkgOiAtMTsK
LSAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1l
c1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJpYnV0aW9uLnRpbWVzVG9T
ZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpIDogLTE7Ci0gICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6IC0xOwotCi0gICAgICAg
IC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNs
aWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVw
b3J0IHRpbWVzLgotICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0x
ICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKLQotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50Ci0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmli
dXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0LCBhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg5LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQKLSAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRh
dGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMs
IGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJs
ZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBbGxV
bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQot
ewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0
VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNl
dFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
Il9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
bGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3Rpbmcs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlVW5hdHRy
aWJ1dGVkKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1dGlvbikKLXsKLSAgICBhdXRv
IHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5y
ZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRv
bWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsK
LQotICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5J
RCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50LCByZW1vdmVV
bmF0dHJpYnV0ZWRRdWVyeSwgInJlbW92ZVVuYXR0cmlidXRlZCJfcyk7Ci0KLSAgICBpZiAoIXNj
b3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25h
bDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVD
bGlja01lYXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEmJiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgY2xlYXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxp
bmcgYW4gYXR0cmlidXRpb24uCi0gICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoKTsKLQotICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBh
dHRyaWJ1dGlvbi4iKTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRp
b24uIl9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LQotICAgIGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKLSAgICBhdXRv
IHByaW9yaXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKLQotICAgIGlmIChV
TkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8o
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIs
IGRhdGEsIHByaW9yaXR5KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZv
LCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJp
b3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKLSAgICB9Ci0KLSAgICBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50
aWxTZW5kIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIGF1dG8gYXR0cmli
dXRpb24gPSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRp
b25TaXRlKTsKLSAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24u
Zmlyc3Q7Ci0gICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNv
bmQ7Ci0KLSAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgewotICAgICAgICAvLyBBbHdh
eXMgY29udmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhl
IHVuYXR0cmlidXRlZCBtYXAuCi0gICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNs
eVVuYXR0cmlidXRlZCk7Ci0gICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5h
dHRyaWJ1dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1v
dmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkpOwotCi0gICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgaGF2ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVu
YXR0cmlidXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1
dGlvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LgotICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNl
bmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVy
dGVkIGEgc3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7Ci0gICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBh
dHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJf
cywgcHJpb3JpdHksICInLiJfcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhp
Z2hlciBwcmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCi0gICAgICAgIGlmICgh
cHJldmlvdXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhh
c0hpZ2hlclByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7Ci0gICAgICAgICAg
ICBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRy
aWJ1dGVkKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0
ZWQpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgewot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQs
ICJSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25l
IHdpdGggYXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGlj
fXUgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKLSAg
ICAgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVy
dGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNl
IGl0IGhhZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVz
cGVjdCB0aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKLSAgICAg
ICAgLy8gbm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0
LgotICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNs
eUJlZW5SZXBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBw
cmV2aW91c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRv
U2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKLSAgICAgICAgICAgIGlmICgh
c2Vjb25kc1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgICAgICBpbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKLQotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVk
IGFuIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAle3B1YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdo
ZXIgcHJpb3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3Vy
ZW1lbnRdIFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBw
cmlvcml0eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5o
YXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOwotfQotCi1WZWN0b3I8V2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKQotewotICAgIGF1
dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2Fs
bEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRv
U3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW4pCi17Ci0gICAgLy8g
RGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBpZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgot
ICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUiOwotICAgIGlmIChkb21haW4pIHsKLSAgICAg
ICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21haW5JRCgqZG9tYWluKTsKLSAgICAgICAgaWYg
KCFkb21haW5JRFRvTWF0Y2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYmluZFBh
cmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwotICAgIH0KLQotICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwot
Ci0gICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNs
ZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotCi0gICAgaWYgKCFjbGVhclVuYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFy
YW1ldGVyKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyVW5hdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50U3RhdGVtZW50LCBjbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGJpbmRQYXJh
bWV0ZXIpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
ckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCi17Ci0gICAgYXV0byBleHBpcmF0aW9u
VGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6Om1heEFnZSgpOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQs
IGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGlyZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRpbWVG
cmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1T
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9T
dHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01l
YXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKLXsKLSAgICBhdXRvIHNv
dXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5j
b2x1bW5JbnQoMCkpOwotICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWlu
U3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICBhdXRvIHNv
dXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3VyY2VTaXRlRG9t
YWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9tYWluLCAiXG5T
b3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKLQotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAg
ICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7
Ci0gICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KTsKLSAgICAg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg2KTsKLQot
ICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgewotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3JpdHksICJcbkF0
dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7Ci0gICAgICAgICAgICBpZiAoZWFy
bGllc3RUaW1lVG9TZW5kID09IC0xKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJO
b3Qgc2V0Iik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RUaW1lVG9TZW5k
KSAtIFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoc2Vj
b25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhfaCkgPyAiV2l0
aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuTm8gYXR0cmli
dXRpb24gdHJpZ2dlciBkYXRhLiIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50
VG9TdHJpbmcoKQotewotICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3Rz
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNU
IENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQy
Il9zKTsKLSAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPmNvbHVtbkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzLT5jb2x1bW5JbnQoMSkpCi0gICAgICAgIHJldHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBD
bGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwotCi0gICAgYXV0byB1bmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01l
YXN1cmVtZW50VG9TdHJpbmciX3MpOwotCi0gICAgaWYgKCF1bmF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRUb1N0cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gdW5hdHRyaWJ1dGVkTnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnRzOiI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbics
Ci0gICAgICAgICAgICBhdHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCkpOwotICAgIH0KLQotICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnks
ICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVkTnVtYmVy
ID0gMDsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIiLCAiQXR0cmlidXRl
ZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRyaWJ1dGVkTnVtYmVy
ICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAotICAgICAgICAgICAgYXR0cmlidXRpb25Ub1N0
cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCi1zdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmIGF0dHJpYnV0aW9u
KQotewotICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50LCBlYXJsaWVzdFRp
bWVzVG9TZW5kUXVlcnksICJlYXJsaWVzdFRpbWVzVG9TZW5kIl9zKTsKLQotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291
cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1l
VG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKLSAgICBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uOwotICAgIAotICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBv
cnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgIGlmIChzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKLSAgICAgICAgZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKTsKLSAgICAKLSAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkgPiAwLjApCi0gICAgICAgIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgxKTsKLSAgICAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoU291cmNlRG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVt
ZW50LCBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZSJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2Us
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9u
RG9tYWluSUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCi17Ci0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvblN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwg
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkKLXsgICAgCi0gICAgYXV0byB0
aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwotICAgIGF1dG8g
c291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Ci0gICAgYXV0byBk
ZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29uZDsKLQotICAg
IGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0
ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
ID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21h
aW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0aW9uUmVwb3J0
RW5kcG9pbnQpIHsKLSAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50OjpTb3VyY2U6Ci0gICAgICAgIGlmICghc291cmNlRWFybGllc3RUaW1l
VG9TZW5kKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgc291
cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50
OjpEZXN0aW5hdGlvbjoKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2Vu
ZCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24oKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAg
Ly8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1bmxlc3MgaXQg
aGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXRl
LgotICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVz
dFRpbWVUb1NlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVk
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNs
ZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
c0FzRXhwaXJlZEZvclRlc3RpbmcoKQotewotICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBX
YWxsVGltZTo6bm93KCkgLSAxX2g7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlID0gPyJfcyk7Ci0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uID0gbnVsbCJfcyk7Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5i
aW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1TY29wZUV4aXQ8RnVu
Y3Rpb248dm9pZCgpPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9n
cmVzcygpKQotICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsg
W10geyB9IH0pOwotCi0gICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIHJldHVybiBtYWtl
U2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10gewotICAgICAgICBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOwotICAgIH0gfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
dW5kZWYgSVRQX1JFTEVBU0VfTE9HCi0jdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxMjk4NjgzODcxYzdlYmQzY2E3
OTQ5YjA1OGI0MzgwNTFkZWIxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3Rh
dGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxw
YWwvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU1FMaXRlRGF0YWJhc2U7
Ci1jbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93biA6IGJvb2w7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9v
bDsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGlj
ID0gNTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RhdGlzdGljcyA9IDc7Ci1z
dGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dW5zaWduZWQsIG51bWJlck9mQnVja2V0c1BlclN0
YXRpc3RpYz4gYnVja2V0U2l6ZXMge3sgMSwgMywgMTAsIDUwLCAxMDAgfX07Ci0KLWNsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKLWNsYXNzIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjsKLQotdXNpbmcgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci11c2luZyBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OwotdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpT
b3VyY2VTaXRlOwotdXNpbmcgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUgPSBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGU7Ci11c2lu
ZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGE7Ci11c2luZyBFeGlzdGluZ0NvbHVtbnMgPSBWZWN0
b3I8U3RyaW5nPjsKLXVzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJpbmc+OwotdXNp
bmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwotdXNpbmcgRXhwZWN0ZWRDb2x1bW5OYW1l
ID0gU3RyaW5nOwotdXNpbmcgU291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwotdXNp
bmcgRGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBkb3VibGU7Ci11c2luZyBTb3VyY2VE
b21haW5JRCA9IHVuc2lnbmVkOwotdXNpbmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVk
OwotCi10eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gVGFi
bGVBbmRJbmRleFBhaXI7Ci0KLS8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAv
IGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlz
dGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZp
bmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKCk7Ci0KLSAgICBzdGF0aWMg
SGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSo+JiBhbGxTdG9yZXMo
KTsKLSAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3NpZnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVy
KERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBv
cGVuZXJJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2
b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYpIGZpbmFsOwotICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNH
cmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdy
YW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVsYXlB
ZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5
VXNlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCByZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKLSAgICBTZWNvbmRzIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0Owot
ICAgIGJvb2wgaXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KLSAg
ICB2b2lkIHNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlRmlsZTsgfQotICAgIHZvaWQgcmVtb3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxs
RG9tYWlucygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gY2hlY2tGb3JNaXNzaW5n
VGFibGVzSW5TY2hlbWEoKTsKLSAgICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdE
YXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIGludGVycnVwdCgpOwotCi0gICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KLSAg
ICB2b2lkIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNl
bmREYXRhPiBhdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aW9uYWw8UmVnaXN0cmFibGVEb21haW4+
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmco
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7Ci0KLSAgICB2b2lkIG9wZW5J
VFBEYXRhYmFzZSgpOwotICAgIHZvaWQgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgYm9vbCBtaXNzaW5nVW5pcXVlSW5kaWNlcygpOwotICAgIGJvb2wgbmVlZHNVcGRhdGVkU2No
ZW1hKCk7Ci0gICAgYm9vbCBuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVt
YSgpOwotICAgIHZvaWQgcmVuYW1lQ29sdW1uSW5UYWJsZShTdHJpbmcmJiwgRXhpc3RpbmdDb2x1
bW5OYW1lJiYsIEV4cGVjdGVkQ29sdW1uTmFtZSYmKTsKLSAgICB2b2lkIGFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZShTdHJpbmcmJiwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiwgY29uc3QgRXhwZWN0
ZWRDb2x1bW5zJik7Ci0gICAgdm9pZCBhZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgdm9pZCByZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHJlbmFtZUNvbHVt
bkluVGFibGUoKTsKLSAgICBUYWJsZUFuZEluZGV4UGFpciBjdXJyZW50VGFibGVBbmRJbmRleFF1
ZXJpZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1cGRhdGVQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFNjaGVtYUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBlbmFibGVGb3JlaWduS2V5cygpOwot
ICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWREb21haW5zKCk7Ci0gICAgdm9pZCBt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGRlc3Ryb3lTdGF0
ZW1lbnRzKCk7Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+Jiwg
QVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIGJvb2wgaGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1YkZyYW1lRG9tYWluJikgY29u
c3Q7Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNG
aXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIFN0cmlu
ZyBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQpIGNvbnN0OwotICAgIEFTQ0lJ
TGl0ZXJhbCBnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0OwotICAgIHZvaWQgbWVy
Z2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgbWVy
Z2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpOwotICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7Ci0gICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWdu
ZWQpOwotICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmlyc3REb21haW5JRCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7Ci0gICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGRvbWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlTGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxs
VGltZSk7Ci0gICAgdm9pZCB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBpbnQpOwotICAgIHZvaWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKLSAgICBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tC
dXRLZWVwQ29va2llc0ZvcigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKSBjb25zdDsKLSAgICBIYXNo
TWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
KFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEKTsKLSAgICB2b2lkIG1hcmtSZXBv
cnRBc1NlbnRUb1NvdXJjZShTb3VyY2VEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCk7Ci0g
ICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IGVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLQotICAgIHN0
cnVjdCBEb21haW5EYXRhIHsKLSAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7Ci0gICAgICAgIFJl
Z2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOwotICAgICAgICBXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b247Ci0gICAgICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKLSAgICAgICAgYm9vbCBpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOwotICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OwotICAgIH07Ci0g
ICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMoKSBjb25zdDsKLSAgICBib29sIGhhc0hhZFVu
ZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihjb25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5n
RGF0ZXNXaW5kb3cpOwotICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWdu
ZWQ+JiYpOwotICAgIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBoYXNVc2Vy
R3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRD
b3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKLSAgICBzdHJ1Y3QgTm90VmVyeVByZXZh
bGVudFJlc291cmNlcyB7Ci0gICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluOwotICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVuY2U7Ci0gICAgICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKLSAgICAgICAg
dW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50OwotICAgICAgICB1bnNp
Z25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7Ci0KLSAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdDsKLQotICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICBDb29raWVBY2Nlc3MgY29va2llQWNj
ZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLQot
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFy
eURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJj
ZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwotICAgIHZvaWQgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
V2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQoKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7
IE5vLCBZZXMgfTsKLSAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBib29sIHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcpOwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2ll
c0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KTsKLSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwg
Ym9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICBSZWdpc3RyYWJsZURvbWFp
bnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0Rl
bGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEYXRh
YmFzZVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBjcmVh
dGVVbmlxdWVJbmRpY2VzKCk7Ci0gICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKLSAgICBTdHJpbmcg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZShjb25zdCBEb21haW5EYXRhJik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0
ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLSAgICBXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFi
YXNlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25UeXBlKTsKLSAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7
Ci0gICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dD4+IGZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOwotCi0gICAgU2NvcGVFeGl0
PEZ1bmN0aW9uPHZvaWQoKT4+IFdBUk5fVU5VU0VEX1JFVFVSTiBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwot
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBtdXRh
YmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9t
YWluQ291bnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFRvcExldmVsRG9tYWluU3Rh
dGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3Rh
dGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
dXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVu
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0
ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRl
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1l
bnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RvbWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRl
bWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc0V4aXN0c1N0
YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YkZy
YW1lRXhpc3RzU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudDsKLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4
cGlyZWRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhckV4cGlyZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25zU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZmluZFVu
YXR0cmlidXRlZFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RU
aW1lVG9TZW5kU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNl
U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQ7Ci0KLSAgICBQQUw6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX29wZXJhdGluZ0RhdGVz
U2l6ZSB7IDAgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGU7Ci0gICAgc3RkOjpvcHRpb25hbDxPcGVyYXRpbmdEYXRlPiBtX3Nob3J0
V2luZG93T3BlcmF0aW5nRGF0ZTsKLSAgICBPcGVyYXRpbmdEYXRlIG1fbW9zdFJlY2VudE9wZXJh
dGluZ0RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0YWJhc2VTdG9yZSgpOyB9Ci1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNzdlMDk4MGFlYTNkMjY1YTE2YTE4NTI0YjQ3ZWVjYmNiYjNjNjk3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0KLSNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3MgS2V5ZWRFbmNv
ZGVyOwotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwotZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7Ci1zdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFRoaXMgaXMgYWx3
YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBTdXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QpOwotCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNv
bnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFVuaXF1ZVJlZjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPj4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcDsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4g
Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJv
bURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlz
dGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
Y29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5hbDsKLSAgICBib29sIGlzUHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEdyYW5kZmF0
aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKLSAg
ICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWlu
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBj
b25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhcmVBbGxUaGlyZFBh
cnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwot
ICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jh
Z2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVz
KT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21h
aW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29s
IGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQsIGJv
b2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgbG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9t
YWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsK
LSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IE9wZXJhdGluZ0RhdGVzV2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
bW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1Vz
ZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLQotICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBJVFAgbWVtb3J5IHN0b3JlLgotICAg
IHZvaWQgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpIG92
ZXJyaWRlIHsgfTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZSB7IH07Ci0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRz
VW50aWxTZW5kRGF0YT5hdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYp
IG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICB2b2lkIGNsZWFyUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoc3RkOjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4pIG92ZXJyaWRlIHsgfTsKLSAg
ICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGUgeyB9
OwotICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH07Ci0gICAgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkgb3ZlcnJpZGUgeyB9OwotICAgIHZv
aWQgbWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nKCkgb3ZlcnJpZGUgeyB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNP
cGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKSBvdmVycmlkZTsKLSAgICBjb25zdCBWZWN0b3I8T3Bl
cmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdE
YXRlczsgfQotICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIG92ZXJyaWRlIHsgbV9vcGVy
YXRpbmdEYXRlcy5jbGVhcigpOyB9Ci0gICAgdm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYmKTsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7Ci0g
ICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+JiYgbmV3RGF0ZXMpOwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHN0YXRpYyBib29sIHNob3VsZEJs
b2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBz
dGF0aWMgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVk
U3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNl
bnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBjb25zdDsKLSAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcp
IGNvbnN0OwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSBjb25zdDsK
LSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwotICAgIHVuc2lnbmVk
IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9Eb21haW4+
JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9pZCBncmFu
dFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6
OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wg
aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92
ZXJyaWRlOwotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAg
UmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgcmVnaXN0
cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKSBvdmVycmlkZTsK
LSAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgSGFzaE1hcDxSZWdpc3RyYWJs
ZURvbWFpbiwgVW5pcXVlUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+PiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKQotICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
c3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzTWVtb3J5U3RvcmUoKTsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKaW5kZXggZWJlMjM1MzY1NGUwOWEyMjE1ODdiMjU3YWVlNjg3NmVjZjUzMTZl
Mi4uYWE0YjQxMWNjMjcwNDMzMzcyNDg2YjE5ZTViZmIwYjBjYmIwZjgzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTI5LDEwNSArMjksMzEzNiBA
QAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZUphci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBl
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwg
eyA1X3MgfTsKKyNkZWZpbmUgSVRQX1JFTEVBU0VfTE9HKHNlc3Npb25JRCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6IiBm
bXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIElUUF9SRUxFQVNFX0xPR19FUlJPUihz
ZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCisv
LyBDT1VOVCBRdWVyaWVzCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkg
PSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1
dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Citjb25zdGV4cHIgYXV0byBjb3VudFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRv
RG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50UHJldmFsZW50UmVzb3VyY2Vz
UXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDE7Il9zOworY29uc3RleHByIGF1dG8g
Y291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNU
IENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDE7Il9zOworCitj
b25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1QgcmVnaXN0cmFibGVEb21haW4pIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0
aW9uID0gMDsiX3M7CisKKy8vIElOU0VSVCBPUiBJR05PUkUgUXVlcmllcworY29uc3RleHByIGF1
dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFp
bnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAg
ICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFs
ZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
K2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8g
VG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5J
RCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IChzb3VyY2VEb21haW5JRCwgdG9E
b21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJl
Z2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRv
bWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICgg
Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5
ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRz
ICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7
Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJy
ZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKKworLy8gSU5T
RVJUIE9SIFJFUExBQ0UgUXVlcmllcworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIGludG8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9t
YWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyB3aGVyZSBy
ZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0VXBkYXRlZCwgZnJvbURvbWFpbklEKSBT
RUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gaW4gKCAiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFpbklELCBsYXN0VXBkYXRlZCwgdG9wRnJh
bWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3VyY2VEb21haW5JRCwgbGFzdFVwZGF0ZWQs
IHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgorICAgICJzb3VyY2VJRCwgdGltZU9m
QWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQpIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPykiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCwgIgorICAgICJzb3VyY2VJRCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSwgcHJpb3JpdHks
IHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0
dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKKworLy8gRVhJU1RTIFF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNF
TEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCB0b3BGcmFtZURvbWFpbklEID0g
KFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291cmNlRG9tYWluSUQg
PSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RT
IChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7
Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9
ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCBz
dWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN0b3Jh
Z2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExl
dmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworCisvLyBVUERBVEUgUXVlcmllcworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiX3MKKyAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwor
Y29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5
ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVWZXJ5UHJldmFsZW50
UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ZlcnlQcmV2YWxl
bnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNs
ZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQREFURSBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGljayA9IC0xLjAiX3M7Citjb25zdGV4cHIg
YXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51
bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25R
dWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCBXSEVSRSBzb3VyY2VTaXRlRG9tYWlu
SUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7CisKKy8vIFNFTEVDVCBR
dWVyaWVzCitjb25zdGV4cHIgYXV0byBkb21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1Qg
ZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5nRnJvbURvbWFpbklEUXVlcnkgPSAiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
ID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxF
Q1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9
ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1
ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFY
KGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURv
bWFpbklEID0gPyJfcworICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gVG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRvRG9tYWluSUQgPSA/IGFuZCBmcm9tRG9t
YWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBh
bmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCisgICAgIlVOSU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0
ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9t
YWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBnZXRBbGxE
b21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIl9zOworY29uc3RleHByIGF1dG8gZ2V0QWxsU3ViU3RhdGlzdGljc1VuZGVyRG9tYWluUXVl
cnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNU
IHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIHRvRG9t
YWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworY29uc3RleHByIGF1dG8gYWxsQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiU0VMRUNUICosIE1JTihlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgYXMg
bWluVmFsICIKKyAgICAiRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMgTk9UIE5VTEwgQU5EIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNU
ICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFzIG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uIElTIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIElTIE5VTEwgT1JERVIgQlkg
bWluVmFsIl9zOworY29uc3RleHByIGF1dG8gZmluZFVuYXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVD
VCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNl
U2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOworY29u
c3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFO
RCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBlYXJsaWVz
dFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEID0gPyJfczsKKworLy8gRVhJU1RTIGZvciB0ZXN0aW5nIHF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5J
RCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBzY3JpcHRMb2Fk
RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWluSUQgPSA/IE9SIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkg
PSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJf
czsKK2NvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNU
UyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0
ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIG9ic2Vy
dmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPykiX3M7CisKKy8vIERFTEVURSBRdWVyaWVz
Citjb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVlcnkgPSAiREVMRVRFIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNsZWFyVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQg
TElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIExJS0UgPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgTElLRSA/Il9zOworY29u
c3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJE
RUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSA/ID4g
dGltZU9mQWRDbGljayJfczsKK2NvbnN0ZXhwciBhdXRvIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5
ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJF
IHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJf
czsKKworY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxF
IE9ic2VydmVkRG9tYWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBy
ZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBs
YXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBn
cmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRz
UmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCwiCisgICAgImlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7
CisKK2VudW0geworICAgIERvbWFpbklESW5kZXgsCisgICAgUmVnaXN0cmFibGVEb21haW5JbmRl
eCwKKyAgICBMYXN0U2VlbkluZGV4LAorICAgIEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LAorICAg
IE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsCisgICAgR3JhbmRmYXRoZXJlZElu
ZGV4LAorICAgIElzUHJldmFsZW50SW5kZXgsCisgICAgSXNWZXJ5UHJldmFsZW50SW5kZXgsCisg
ICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAorICAgIElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleAorfTsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxE
b21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKCIKKyAgICAidG9wTGV2ZWxE
b21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlH
TiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlu
cyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8g
Y3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04gS0VZKGRvbWFpbklE
KSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUs
ICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZl
ZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291cmNlRG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZ
KHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNF
UyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29u
c3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAoIgorICAgICJzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9S
RUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OworCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAi
Q1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJ0YXJnZXRE
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
IgorICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKSJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIK
KyAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWSh0
b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZFUkVOQ0VTIE9i
c2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4
cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzID0gIkNSRUFURSBU
QUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICgiCisgICAgInRvcEZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
bGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWluSUQgSU5U
RUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhwciBh
dXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCB0b0RvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBj
cmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZP
UkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FT
Q0FERSkiX3M7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFU
RSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgorICAgICJ5ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1v
bnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElOVEVHRVIgTk9UIE5VTEwpIl9zOworCitj
b25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9
ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAg
ICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAg
ICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0b2tlbiBURVhULCBzaWduYXR1cmUgVEVY
VCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNlU2l0ZURvbWFpbklEKSAiCisgICAgIlJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9S
RUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgorICAgICJPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29uc3RleHBy
IGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBU
QUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAgICAic291cmNlU2l0
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBwcmlvcml0eSBJTlRFR0VSIE5PVCBOVUxM
LCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIKKyAgICAiZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVBTCwgIgorICAgICJGT1JFSUdOIEtFWShz
b3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJF
RkVSRU5DRVMgIgorICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKKworLy8gQ1JFQVRFIFVOSVFVRSBJTkRFWCBRdWVyaWVzLgorY29uc3RleHByIGF1
dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFpbklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEICkiX3M7Citjb25z
dGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
ICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudF9zb3VyY2VEb21h
aW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCApIl9zOworY29u
c3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20g
PSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWluSUQgb24gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCApIl9zOworY29uc3RleHBy
IGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20g
KCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c190b3BG
cmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQgb24gVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1YnJlc291cmNlRG9tYWluSUQgKSJfczsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1lRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJyZXNvdXJjZURvbWFpbklEX3RvcEZyYW1l
RG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YnJlc291cmNl
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVU5JUVVFIElO
REVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb19zdWJyZXNvdXJj
ZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1
YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3Vi
cmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEICkiX3M7Citjb25zdGV4
cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBVTklRVUUg
SU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRlc195ZWFyX21vbnRoX21vbnRoRGF5IG9u
IE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1vbnRoRGF5ICkiX3M7Citjb25zdGV4cHIg
YXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWluSURfZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9t
YWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Citjb25zdGV4cHIgYXV0byBjcmVh
dGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUg
VU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlvblNpdGVEb21haW5JRCBvbiBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEICkiX3M7CisKKy8vIEFkZCBvbmUgdG8gdGhlIGNvdW50IG9mIHRoZSBh
Ym92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFi
bGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJl
Y2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgorY29uc3QgaW50IGV4cGVjdGVkSW5kZXhDb3VudCA9
IDE0OworCitzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEo
KQoreworICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERvbWFpbjsKK30KIAotc3RhdGljIFN0cmlu
ZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKK3N0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVy
bmF0ZSgpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9tYWluc1wiIChkb21h
aW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxM
IFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2Vy
SW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZh
bGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
ZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCxpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5VTEwpIl9zOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQorc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRV
bmF0dHJpYnV0ZWRDb2x1bW5zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJ0aW1lT2ZBZENs
aWNrIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcyB9KTsKKyAgICByZXR1
cm4gY29sdW1ucy5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhw
ZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucygpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywgImVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJr
ZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CisgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzTmV3Q3JlYXRlVGFibGVT
Y2hlbWEoY29uc3QgU3RyaW5nJiBzY2hlbWEpCit7CisgICAgcmV0dXJuIHNjaGVtYS5jb250YWlu
cygiUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMiKTsKK30KKworc3RhdGljIFN0cmluZyBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY29uc3QgY2hhciogb3JpZ2luYWxRdWVyeSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKG9yaWdpbmFsUXVlcnkpLnJlcGxhY2UoIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyIsICJDUkVBVEUgVU5JUVVFIElOREVYIik7Cit9CisKK3N0
YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBUYWJsZUFuZEluZGV4UGFpcj4mIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKQorewor
ICAgIHN0YXRpYyBhdXRvIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VGFibGVBbmRJbmRleFBhaXI+IHsKKyAgICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBzdGQ6
Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlT2JzZXJ2ZWRE
b21haW4sIHN0ZDo6bnVsbG9wdCkgfSwKKyAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBz
dGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wTGV2
ZWxEb21haW5zLCBzdGQ6Om51bGxvcHQpIH0sCisgICAgICAgIHsgIlN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4+KGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJ
bmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
KGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hT
dG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB9
LAorICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudCkpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbSwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAg
eyAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUxvYWRlZFRo
aXJkUGFydHlTY3JpcHRzIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgc3RyaXBJbmRl
eFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cykpIH0sCisgICAgICAgIHsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+Pihj
cmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4UXVlcnlUb01hdGNo
U3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KSkgfSwKKyAgICAgICAgeyAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1
ZShjcmVhdGVVbmlxdWVJbmRleFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9LAor
ICAgICAgICB7ICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIl9zLCBzdGQ6Om1ha2VfcGFp
cjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykpIH0sCisgICAgICAgIHsgIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAgeyAiT3BlcmF0aW5nRGF0ZXMi
X3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVP
cGVyYXRpbmdEYXRlcywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVu
aXF1ZUluZGV4T3BlcmF0aW5nRGF0ZXMpKSB9LAorICAgICAgICB7ICJVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+KGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBz
dHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIH0sCisgICAgICAgIHsgIkF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4+KGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4QXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfQorICAgIH0pOworICAgIAorICAgIHJldHVy
biBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5
cGUmIHZhbHVlcykKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWlu
c1RvRGVsZXRlQWxsQ29va2llc0ZvcikKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5p
c0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgZGF0YSkiKTsKLSAg
ICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNvb2tpZXNGb3IpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCBkb21haW4uc3RyaW5n
KCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0
ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWls
ZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQgY29v
a2llcykiKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGljX3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVj
bHR5cGUodmFsdWUpPj4pCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1w
dHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyIn
KTsKKyAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotT3BlcmF0aW5n
RGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKK0hhc2hTZXQ8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4mIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWxsU3RvcmVzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1ZSwgU2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwgbV9zaG91bGRJbmNs
dWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhvc3QpCisgICAgLCBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlRGlyZWN0b3J5UGF0aCwgIm9ic2VydmF0aW9ucy5k
YiJfcykpCisgICAgLCBtX3RyYW5zYWN0aW9uKG1fZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nhcnko
KTsKKyAgICBlbmFibGVGb3JlaWduS2V5cygpOworCisgICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5n
IGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkgYmUgY2Fs
bGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1Zh
Y3V1bSgpKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7CisgICAgYWxsU3RvcmVzKCkuYWRkKHRoaXMpOworfQorCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIGNsb3Nl
KCk7CisgICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xvc2UoKQoreworICAgIGRlc3Ryb3lTdGF0ZW1lbnRzKCk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgp
Cit7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fc3RvcmFnZURpcmVjdG9yeVBh
dGgpKSB7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVj
dG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VGaWxlID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1
c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUpIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
CitzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBtaXNzaW5nVGFibGVzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
IGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZm9yIChh
dXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMg
bWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorICAgIGlmIChtaXNzaW5nVGFibGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBtaXNz
aW5nVGFibGVzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxl
Rm9yZWlnbktleXMoKQoreworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAgaWYg
KCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlw
ZSA9ICd0YWJsZSciX3MpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0
byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Y29sdW1u
VGV4dCgwKTsKKworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PT8gQU5EIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7CisgICAg
aWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsK
KyAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpbmRleCA9IHJh
d0luZGV4OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPj4oV1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRl
eCkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWEoKQoreworICAgIGF1dG8gY3VycmVudFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50Il9zKS5maXJzdDsKKworICAgIGlmICghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkg
JiYgY3VycmVudFNjaGVtYSAhPSBjcmVhdGVBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQorewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYg
KHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNv
dW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWRE
b21haW5zKCkKK3sKKyAgICAvLyBDaGVjayBhIHRhYmxlIGZvciBhIHJlZmVyZW5jZSB0byBUb3BM
ZXZlbERvbWFpbnMsIGEgc2lnbiBvZiB0aGUgb2xkIHNjaGVtYS4KKyAgICBhdXRvIG9sZFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byJfcykuZmlyc3Q7CisgICAgcmV0dXJuIG5lZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEob2xkU2No
ZW1hKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om5lZWRzVXBkYXRl
ZFNjaGVtYSgpCit7CisgICAgLy8gVGhlcmUgYXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBv
dGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUgdG8gdXBncmFkZXMuCisgICAgLy8gQWxsIG90aGVy
IHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRo
ZXkgYXJlIGNvcnJlY3QuCisgICAgaWYgKG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlz
c2luZ1VuaXF1ZUluZGljZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBVTlVTRURfUEFSQU0odGFibGUpOworICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0
KHRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRXhwZWN0
ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRl
bWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCit7Cisg
ICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIikKKyAgICAgICAg
cmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRl
ZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBfU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBH
Uk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEIl9zKTsKKworICAgIGlm
ICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJl
dHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVw
ZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZST00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7
CisKKyAgICBpZiAodGFibGUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQorICAg
ICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxh
c3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9NIF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQiX3MpOworCisgICAgaWYg
KHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWlu
SUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQs
IGZyb21Eb21haW5JRCJfcyk7CisKKyAgICBpZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNF
TEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJ
RCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWlu
SUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zKTsKKworICAgIGlmICh0YWJsZSA9PSAiQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9m
QWRDbGljayksIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBr
ZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAgQlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5h
dGlvblNpdGVEb21haW5JRCJfcyk7CisKKyAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJUIElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJ
TkNUICogRlJPTSBfIiwgdGFibGUpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFu
ZWVkc1VwZGF0ZWRTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBhdXRvIGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1h
a2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpKTsK
KyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjcmVh
dGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0
ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVU
YWJsZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgdGFibGUpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxl
RGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBzY2hlbWEsIGVycm9y
IG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKSk7CisgICAgICAgIGlm
ICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3
VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3Ig
bWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0
YWJsZU5hbWUsICIpIikpOworCisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gY29sdW1uczsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7
CisgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBjb2x1
bW5zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBl
eGlzdGluZ0NvbHVtbnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQor
eworICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5z
aXplKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQg
Q09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5
KCkKK3sKKyAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9ICJVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKKyAgICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRU
YWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworCisgICAg
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgY29sdW1uc0Zv
clRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1u
cygpKTsKKyAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwg
Y29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3RlZEF0dHJpYnV0ZWRD
b2x1bW5zKCkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1l
Q29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4
aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1l
KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAi
LCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCkK
K3sKKyAgICAvLyBBdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgY2FzZS4KKyAg
ICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Il9zOworICAgIGNvbnN0IGF1dG8gb2xkRWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZCJfczsKKyAgICBjb25zdCBhdXRvIG5ld0VhcmxpZXN0
VGltZVRvU2VuZENvbHVtbiA9ICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSJfczsKKyAgICBj
b25zdCBhdXRvIG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiYXR0cmlidXRlT25T
aXRlRG9tYWluSUQiX3M7CisgICAgY29uc3QgYXV0byBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
Q29sdW1uID0gImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zOworICAgIGNvbnN0IGF1dG8gZm91
bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zID0gY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJs
ZU5hbWUpOworCisgICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhv
bGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4pKQorICAgICAgICByZW5hbWVDb2x1bW5JblRhYmxl
KGF0dHJpYnV0ZWRUYWJsZU5hbWUsIG9sZEVhcmxpZXN0VGltZVRvU2VuZENvbHVtbiwgbmV3RWFy
bGllc3RUaW1lVG9TZW5kQ29sdW1uKTsKKworICAgIGlmIChmb3VuZEF0dHJpYnV0ZWRUYWJsZUNv
bHVtbnMuY29udGFpbnMob2xkQXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbikpCisgICAgICAg
IHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRpb25E
ZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7CisKKyAg
ICAvLyBVbmF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgorICAgIGF1
dG8gdW5hdHRyaWJ1dGVkVGFibGVOYW1lID0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50Il9zOworICAgIGF1dG8gZm91bmRVbmF0dHJpYnV0ZWRUYWJsZUNvbHVtbnMgPSBjb2x1
bW5zRm9yVGFibGUodW5hdHRyaWJ1dGVkVGFibGVOYW1lKTsKKworICAgIGlmIChmb3VuZFVuYXR0
cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uKSkKKyAgICAgICAgcmVuYW1lQ29sdW1uSW5UYWJsZSh1bmF0dHJpYnV0ZWRUYWJsZU5hbWUs
IG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4sIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRp
b25Db2x1bW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIG1pc3NpbmdUYWJsZXMgPSBjaGVj
a0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOworICAgIGlmICghbWlzc2luZ1RhYmxlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiB0YWJsZSA6ICptaXNzaW5nVGFibGVzKSB7
CisgICAgICAgIGF1dG8gY3JlYXRlVGFibGVRdWVyeSA9IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1
ZXJpZXMoKS5nZXQodGFibGUpLmZpcnN0OworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmRTbG93KGNyZWF0ZVRhYmxlUXVlcnkpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNz
aW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgfQorCisgICAg
aWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nVGFi
bGVzIGZhaWxlZCB0byBjcmVhdGUgdW5pcXVlIGluZGljZXMsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBvcGVuSVRQRGF0YWJhc2UoKTsKKyAgICBhZGRNaXNzaW5nVGFibGVz
SWZOZWNlc3NhcnkoKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0
YWJsZS4KKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdP
YnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVt
YSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJsZS4iKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUg
aXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxlLgorICAgICAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAg
ICAgICAgICAgIG9wZW5JVFBEYXRhYmFzZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsK
KyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKKworICAgIC8v
IElmIHRoZSBPYnNlcnZlZERvbWFpbnMgc2NoZW1hIGluIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIGRpcmVjdG9yeSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1hLCBkZWxldGUgdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgLy8gRklYTUU6IE1pZ3JhdGUgb2xkIE9ic2VydmVkRG9tYWlucyBkYXRh
IHRvIG5ldyB0YWJsZSBzY2hlbWEuCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIG9w
ZW5JVFBEYXRhYmFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVuYW1p
bmcgYW5kIGFkZGluZyBjb2x1bW5zIHNob3VsZCBiZSBkb25lIGJlZm9yZSBtaWdyYXRpbmcgdG8g
YXZvaWQgbWlzbWF0Y2hlZCBvciBtaXNzaW5nIGNvbHVtbnMuCisgICAgcmVuYW1lQ29sdW1uc0lm
TmVjZXNzYXJ5KCk7CisgICAgYWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpOworICAgIG1p
Z3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOworfQorCitTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjb3BlZFN0YXRlbWVu
dChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBB
U0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAoreworICAg
IGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dE9yRXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5n
LmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0
ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnRlcnJ1cHQoKQoreworICAgIGlmIChtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICBtX2RhdGFiYXNlLmludGVycnVwdCgpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERv
bWFpbkNvdW50UXVlcnksICJpc0VtcHR5Il9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNFbXB0eSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuICFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZVVuaXF1ZUluZGljZXMoKQoreworICAgIGlmICgh
bV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICB8
fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpCisgICAgICAgIHx8
ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSkKKyAgICAgICAgfHwg
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAg
IHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
KQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eE9wZXJhdGluZ0RhdGVzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleEF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVVbmlx
dWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZU9i
c2VydmVkRG9tYWluKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRv
cExldmVsRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRv
cExldmVsRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNy
ZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlT3BlcmF0aW5nRGF0ZXMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBPcGVyYXRpbmdEYXRlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZUF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY3Jl
YXRlVW5pcXVlSW5kaWNlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlc3Ryb3lTdGF0
ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
ID0gbnVsbHB0cjsKKyAgICBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fdXBkYXRlVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2lzVmVyeVByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3RvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9nZXRSZXNvdXJj
ZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAg
ICBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxscHRyOwor
ICAgIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckV4cGlyZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9hbGxVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9hbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9maW5kQXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV91cGRhdGVBdHRy
aWJ1dGlvbnNFYXJsaWVzdFRpbWVUb1NlbmRTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX21hcmtSZXBvcnRBc1Nl
bnRUb1NvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9tYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9lYXJsaWVzdFRpbWVzVG9TZW5k
U3RhdGVtZW50ID0gbnVsbHB0cjsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxv
YWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGRvbWFpbklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBkb21h
aW5zIG5vdCBpbiB0aGUgZGF0YWJhc2UuIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQs
IGluc2VydE9ic2VydmVkRG9tYWluUXVlcnksICJpbnNlcnRPYnNlcnZlZERvbWFpbiJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
VGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4LCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZERvdWJsZShMYXN0U2VlbkluZGV4LCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZERvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBsb2FkU3Rh
dGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJ
bnQoR3JhbmRmYXRoZXJlZEluZGV4LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KElzUHJldmFsZW50
SW5kZXgsIGxvYWRTdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgs
IGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbElu
ZGV4LCBsb2FkU3RhdGlzdGljcy5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJj
ZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRPYnNlcnZlZERv
bWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2NvcGVk
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0
aW9uc2hpcEV4aXN0cyhTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYgc3RhdGVtZW50LCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdAoreworICAgIGlmICghZmlyc3REb21haW5JRCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEs
ICpmaXJzdERvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWxhdGlvbnNoaXBFeGlzdHMgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiAhIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnks
ICJkb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWluTGlzdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChhdXRvJiB0b3BGcmFtZVJlc291cmNlIDogZG9tYWluTGlzdCkgeworICAgICAgICAv
LyBJbnNlcnQgcXVlcnkgd2lsbCBmYWlsIGlmIHRvcCBmcmFtZSBkb21haW4gaXMgbm90IGFscmVh
ZHkgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGlmIChlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZVJlc291cmNlKS5zZWNvbmQpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB0b3BG
cmFtZVJlc291cmNlLnN0cmluZygpLCAnIicpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQor
eworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgCisgICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKKyAg
ICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBXYWxs
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluc2VydFJl
bGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJl
Z2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbik7CisgICAgCisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWlu
SUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0
YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklE
LnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBs
b2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJs
ZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVn
aXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlw
dHMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQs
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFu
c2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGN1cnJlbnRSZWdpc3RyYWJsZURvbWFp
biA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCk7CisgICAgYXV0
byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5Eb3VibGUoTGFzdFNlZW5JbmRleCk7
CisgICAgYXV0byBjdXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGN1cnJlbnQtPmNv
bHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4KTsKKyAgICBib29s
IGN1cnJlbnRHcmFuZGZhdGhlcmVkID0gY3VycmVudC0+Y29sdW1uSW50KEdyYW5kZmF0aGVyZWRJ
bmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1bW5JbnQo
SXNQcmV2YWxlbnRJbmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNWZXJ5UHJldmFsZW50ID0gY3Vy
cmVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KTsKKyAgICB1bnNpZ25lZCBjdXJy
ZW50RGF0YVJlY29yZHNSZW1vdmVkID0gY3VycmVudC0+Y29sdW1uSW50KERhdGFSZWNvcmRzUmVt
b3ZlZEluZGV4KTsKKyAgICBib29sIGN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsID0gY3VycmVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxJbmRleCk7CisKKyAgICBBU1NFUlQoY3VycmVudFJlZ2lzdHJhYmxlRG9tYWlu
ID09IG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGlmIChXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoY3VycmVudExhc3RTZWVuKSA8IG90aGVyLmxhc3RTZWVuKQorICAg
ICAgICB1cGRhdGVMYXN0U2VlbihvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIubGFzdFNl
ZW4pOworCisgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8g
SWYgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB0aW1lIGhhcyBiZWVuIHJlc2V0IGRvIHNv
IGhlcmUgdG9vLgorICAgICAgICBpZiAoIW90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKQorICAgICAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBmYWxzZSwgeyB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlLCBzdGQ6Om1heChXYWxsVGltZTo6ZnJvbVJh
d1NlY29uZHMoY3VycmVudE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBvdGhlci5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkpOworCisgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQg
JiYgIWN1cnJlbnRHcmFuZGZhdGhlcmVkKQorICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVy
LnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKKyAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNv
dXJjZSAmJiAhY3VycmVudElzUHJldmFsZW50KQorICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVu
dFJlc291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQorICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgIGlmIChvdGhlci5k
YXRhUmVjb3Jkc1JlbW92ZWQgPiBjdXJyZW50RGF0YVJlY29yZHNSZW1vdmVkKQorICAgICAgICB1
cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQob3RoZXIucmVnaXN0cmFibGVEb21haW4sIG90aGVyLmRh
dGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgaWYgKG90aGVyLmdvdExpbmtEZWNvcmF0aW9uRnJvbVBy
ZXZhbGVudFJlc291cmNlICYmICFjdXJyZW50SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBzdGF0aXN0aWMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJl
c291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5O
YW1lUXVlcnksICJtZXJnZVN0YXRpc3RpYyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJn
ZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMgbm90IGZv
dW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3Rh
dGlzdGljKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3Rh
dGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3MpIHsKKyAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9t
YWluKHN0YXRpc3RpYyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY3MgaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFp
bGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXJnZVN0YXRpc3RpYyhzdGF0aXN0aWMpOworICAg
IH0KKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcy4KKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKK30KKworc3RhdGljIEFT
Q0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKQoreworICAgIHJldHVybiAi
U0VMRUNUIGRvbWFpbklELCIKKyAgICAgICAgIihjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSAr
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lICsgY291bnRVbmlxdWVSZWRpcmVjdFRvKSBh
cyBzdW0gICIKKyAgICAgICAgIkZST00gKCAiCisgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAg
ICAgImRvbWFpbklELCAiCisgICAgICAgICAgICAiQ09VTlQoRElTVElOQ1QgZi50b3BGcmFtZURv
bWFpbklEKSBhcyBjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSwgIgorICAgICAgICAgICAgIkNP
VU5UKERJU1RJTkNUIHIudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJSZXNvdXJjZVVuZGVy
VG9wRnJhbWUsICIKKyAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCB0b0RvbWFpbklEKSBhcyBj
b3VudFVuaXF1ZVJlZGlyZWN0VG8gIgorICAgICAgICAiRlJPTSAiCisgICAgICAgICJPYnNlcnZl
ZERvbWFpbnMgbyAiCisgICAgICAgICJMRUZUIEpPSU4gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyBmIE9OIG8uZG9tYWluSUQgPSBmLnN1YkZyYW1lRG9tYWluSUQgIgorICAgICAgICAiTEVG
VCBKT0lOIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgciBPTiBvLmRvbWFpbklEID0g
ci5zdWJyZXNvdXJjZURvbWFpbklEICIKKyAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvIHUgT04gby5kb21haW5JRCA9IHUuc3VicmVzb3VyY2VEb21haW5JRCAi
CisgICAgICAgICJXSEVSRSBpc1ByZXZhbGVudCBMSUtFID8gIgorICAgICAgICAiYW5kIGhhZFVz
ZXJJbnRlcmFjdGlvbiBMSUtFID8gIgorICAgICAgICAiR1JPVVAgQlkgZG9tYWluSUQpIE9SREVS
IEJZIHN1bSBERVNDOyJfczsKK30KKworVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRoaXJkUGFydHlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRBbGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRB
bGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5RdWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3Bl
Y2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGly
ZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4sIGVycm9yIG1lc3Nh
Z2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5
PiB0aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7CisgICAgd2hpbGUg
KHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbiA9IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudC0+Y29sdW1uSW50KDApKSk7Cisg
ICAgICAgIHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucy5hcHBlbmRJ
Zk5vdENvbnRhaW5zKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHkgeyBmaXJzdFBhcnR5RG9tYWluLCBoYXNTdG9yYWdlQWNj
ZXNzKGZpcnN0UGFydHlEb21haW4sIHRoaXJkUGFydHlEb21haW4pLCBnZXRNb3N0UmVjZW50bHlV
cGRhdGVkVGltZXN0YW1wKHRoaXJkUGFydHlEb21haW4sIGZpcnN0UGFydHlEb21haW4pIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zOworfQorCitzdGF0aWMgYm9vbCBoYXNCZWVuVGhpcmRQYXJ0eSh1bnNpZ25lZCB0aW1lc1Vu
ZGVyRmlyc3RQYXJ0eSkKK3sKKyAgICByZXR1cm4gdGltZXNVbmRlckZpcnN0UGFydHkgPiAwOwor
fQorCitWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFy
dHlEYXRhTGlzdDsKKyAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVy
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3MgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkp
OworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNz
LT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKKyAgICAgICAgfHwg
c29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OworICAgIH0KKyAg
ICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkp
IHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGlj
cy0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7CisgICAg
ICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGly
ZFBhcnR5RG9tYWluKSB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0
eURhdGFMaXN0OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVt
ZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRz
UmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21h
aW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1
bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJl
ZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJIaXQgJXUgcmVj
dXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJuaW5nIGVhcmx5LiIsIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAorICAgICsrbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxsczsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlmaWVkRG9t
YWluczsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJl
c291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLT5j
b2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRS
ZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQo
bmV3RG9tYWluSUQpOworICAgIH0KKworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZy
YW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5jb2x1
bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJl
Y3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRSZXN1
bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3
RG9tYWluSUQpOworICAgIH0KKworICAgIGlmIChuZXdseUlkZW50aWZpZWREb21haW5zLmVtcHR5
KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgZm9yIChh
dXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykKKyAgICAgICAgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0OworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFp
bnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRl
bWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmlu
c2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIH0K
KworICAgIGF1dG8gdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291
cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7
CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAg
ICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
YnVpbGRMaXN0KHByZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQ
cmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitIYXNoTWFwPHVuc2lnbmVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDx1
bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBhdXRvIG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlm
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAg
ICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVt
bkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklE
c09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOworCisgICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmICghZG9tYWluSUQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAo
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1
bW5JbnQoMCkpOworICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
ICghZG9tYWluSUQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAgICBBU1NFUlQoZG9tYWluSUQpOworICAg
ICAgICAgICAgaWYgKCFkb21haW5JRCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFr
ZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKKyAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAoIWRv
bWFpbklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBy
ZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgPSBmaW5kTm90
VmVyeVByZXZhbGVudFJlc291cmNlcygpOworICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9
IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA6IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAg
ICAgaWYgKHNob3VsZFNraXAocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gY2xh
c3NpZmllcigpLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5z
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpOworICAg
ICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQor
ICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNG
b3JEZWJ1Z01vZGUoKTsKKyAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZh
bGVudCgpOworICAgIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRh
bFZhY3V1bUNvbW1hbmQoKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBj
b25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBz
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdG9yYWdlQWNjZXNzRXhp
c3RzU3RhdGVtZW50LCBzdG9yYWdlQWNjZXNzRXhpc3RzUXVlcnksICJoYXNTdG9yYWdlQWNjZXNz
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9t
YWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBzdGQ6Om9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIg
cGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURv
bWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0
dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN3aXRjaCAoY29v
a2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICBjYXNlIENv
b2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29r
aWVQb2xpY3k6CisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtl
UmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4sIFtz
dG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9v
bCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVl
dWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llQWNjZXNzOjpPbmx5
SWZHcmFudGVkOgorICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgorICAgICAgICBicmVhazsKKyAg
ICB9OworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3Rv
cmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBh
Z2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5k
bGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdl
SUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NR
dWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
cyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZy
YW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlE
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgIGlm
ICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0
U3RvcmFnZUFjY2VzcyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChj
b29raWVBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSkgeworICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpDYW5ub3RSZXF1ZXN0OgorICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdM
b2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcg
IiBzaW5jZSBpdHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBh
bmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIs
IHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVi
dWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiW0lUUF0gQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNj
ZXNzIHRvICciX3MsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBzaW5jZSBpdHMgY29va2ll
cyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNl
aXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiJfcykpOworICAgICAgICB9Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVl
c3RBY2Nlc3MpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2Vk
T25Db29raWVQb2xpY3k6CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVk
KCkpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiTm8gbmVlZCB0
byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiBzaW5jZSBp
dHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIE5vdGUg
dGhhdCB0aGUgdW5kZXJseWluZyBjb29raWUgcG9saWN5IG1heSBzdGlsbCBibG9jayB0aGlzIHRo
aXJkLXBhcnR5IGZyb20gc2V0dGluZyBjb29raWVzLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5n
KCJbSVRQXSBObyBuZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICciX3MsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLCAiJyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4g
dGhpcmQtcGFydHkgY29udGV4dHMuIE5vdGUgdGhhdCB0aGUgdW5kZXJseWluZyBjb29raWUgcG9s
aWN5IG1heSBzdGlsbCBibG9jayB0aGlzIHRoaXJkLXBhcnR5IGZyb20gc2V0dGluZyBjb29raWVz
LiJfcykpOworICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nl
c3NTdGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZUFj
Y2Vzczo6T25seUlmR3JhbnRlZDoKKyAgICAgICAgLy8gSGFuZGxlZCBiZWxvdy4KKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0gaGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJhbWVTdGF0dXMuc2Vjb25k
LCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPT0gU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObykgeworICAgICAgICBpZiAoVU5MSUtFTFkoZGVi
dWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBE
ZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBz
dG9yYWdlIGFjY2VzcyB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciAlIiBQUklWQVRF
X0xPR19TVFJJTkcgIiBvciBub3QuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIEFib3V0IHRvIGFzayB0aGUgdXNl
ciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKSwgIicgdW5kZXIgJyJfcywgdG9wRnJhbWVEb21haW4uc3RyaW5n
KCksICInIG9yIG5vdC4iX3MpKTsKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPT0gU3RvcmFnZUFj
Y2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9n
Z2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcs
ICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1
bmRlciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQ
RGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gU3RvcmFnZSBhY2Nl
c3Mgd2FzIGdyYW50ZWQgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVy
ICciX3MsIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLCAiJy4iX3MpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgYXV0byBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSA/Il9zKTsKKyAg
ICBpZiAoIWluY3JlbWVudFN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFn
ZUFjY2Vzcy0+YmluZEludCgxLCAqc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUo
c3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlE
LCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29wZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFu
dGVkKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBT
dG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNj
ZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcywgUGFnZUlkZW50aWZpZXIgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21h
aW4mJiBvcGVuZXJEb21haW4pCit7CisgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcyAhPSBvcGVuZXJEb21haW4pOworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkp
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJh
dGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgdW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAlIiBQUklWQVRFX0xPR19TVFJJTkcg
Iiwgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0
cmluZygiW0lUUF0gU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICciX3MsIGRvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKSwgIicgdW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAn
Il9zLCBvcGVuZXJEb21haW4uc3RyaW5nKCksICInLCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gaW4g
dGhlIG9wZW5lZCB3aW5kb3cuIl9zKSk7CisgICAgfQorCisgICAgZ3JhbnRTdG9yYWdlQWNjZXNz
SW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3ZlKG9w
ZW5lckRvbWFpbiksIHN0ZDo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBTdG9yYWdlQWNjZXNzUHJv
bXB0V2FzU2hvd246Ok5vLCBTdG9yYWdlQWNjZXNzU2NvcGU6OlBlclBhZ2UsIFtdKFN0b3JhZ2VB
Y2Nlc3NXYXNHcmFudGVkKSB7IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4s
IFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlE
LCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9t
cHRXYXNTaG93biwgU3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29w
ZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgaWYgKHByb21wdFdhc1No
b3duID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CisgICAgICAgIGF1dG8g
c3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25k
KSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3Qg
Y29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmly
c3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICBpZiAo
IU5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9y
Q29tcGF0aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbikpCisgICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlcklu
dGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwor
I2VuZGlmCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
dG9wRnJhbWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOworICAgIH0KKworICAg
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZN
b3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2Nv
cGUsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWlu
JiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHN0ZDo6
b3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQs
IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9tcHRXYXNTaG93bk5vd09yRWFybGllciwg
U3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VB
Y2Nlc3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFtZURvbWFpbiA9PSB0b3BGcmFtZURv
bWFpbikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzV2FzR3JhbnRl
ZDo6WWVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwcm9tcHRXYXNTaG93
bk5vd09yRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgeworICAg
ICAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Cisg
ICAgICAgIGlmICghc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29y
ZDo6Tm8pOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIGlmICghTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uOjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVy
cG9zZXNXaXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1l
RG9tYWluKSkKKyAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJh
bWVEb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CisjZW5kaWYKKyAgICAgICAg
QVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1YkZyYW1l
U3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93bjo6WWVzKTsKKyNlbmRpZgorICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVE
b21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFt
ZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc2NvcGUsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9w
RnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdG9yZV0oU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQgd2FzR3JhbnRlZCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1
ZXVlKCkuZGlzcGF0Y2goW3dhc0dyYW50ZWQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdhc0dyYW50ZWQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3Rv
cmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5y
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhj
b25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiByZWdpc3RyYWJsZURvbWFpbiA6IGRvbWFp
bnMpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihyZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgIGlmICghcmVzdWx0
LnNlY29uZCkKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21h
aW5zIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGJ1
aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRhdGVTdGF0ZW1l
bnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpl
bnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFkZWJ1Z01vZGVFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21h
aW5zVG9CbG9jazsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwor
ICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWls
ZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UiLCB0aGlz
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkhpZ2gpOworICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdT
dGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKworICAgIGlmICghZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CisgICAgICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90
IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z01hbnVhbFBy
ZXZhbGVudFJlc291cmNlIiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICB9CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIHByaW1hcnlE
b21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpKTsKKworICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAlIiBQUklWQVRFX0xPR19TVFJJ
TkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcg
TW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIERp
ZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLCAiJyBh
cyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4i
X3MpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxv
Y2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291
cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVs
YXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRl
ZEJ5VXNlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wg
YXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gdG9w
RnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUg
PSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBib29sIHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNNYWluRnJhbWUgJiYgIShhcmVUYXJn
ZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5z
U2FtZVNpdGUpKSB7CisgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJh
bWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQgb2YgdGFyZ2V0IGRvbWFpbiIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAq
dGFyZ2V0UmVzdWx0LnNlY29uZCk7CisgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRy
dWU7CisgICAgfQorCisgICAgaWYgKCFhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUp
IHsKKyAgICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBib29sIHdhc05hdmln
YXRlZEFmdGVyU2hvcnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAhd2FzUG90ZW50aWFs
bHlJbml0aWF0ZWRCeVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCA8IHBh
cmFtZXRlcnMoKS5taW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkVG9Ob3RCZUFSZWRp
cmVjdDsKKyAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05hdmlnYXRlZEFmdGVyU2hv
cnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJl
ZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICBhdXRvIHRhcmdldFJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdl
dERvbWFpbik7CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFp
bGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFp
bkZyYW1lKSIsIHRoaXMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7
IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
dGFyZ2V0RG9tYWluIH0pLCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBz
ZXQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3Qg
dG8gJSIgUFVCTElDX0xPR19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgdGFyZ2V0RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBz
b3VyY2VEb21haW4uc3RyaW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0
byAnIiwgdGFyZ2V0RG9tYWluLnN0cmluZygpLCAiJy4iKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOworICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXRE
b21haW4pOworICAgICAgICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVj
dGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQgb2YgdGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNSZWRpcmVjdCkiLCB0
aGlzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpy
ZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQu
c2Vjb25kKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVkKQorICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtE
ZWNvcmF0aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mIGZyb21Eb21haW4sIGNvbnN0IE5h
dmlnYXRlZFRvRG9tYWluJiB0b0RvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQoZnJvbURvbWFpbiAhPSB0b0RvbWFpbik7CisKKyAgICBhdXRvIHRy
YW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1
dG8gdG9Eb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0b0RvbWFpbik7CisgICAgaWYgKCF0b0RvbWFpblJlc3VsdC5zZWNvbmQpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24gd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7CisgICAgCisgICAgaWYg
KGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCisgICAgICAgIHNldElzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0YXJnZXRS
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOworICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJf
cyk7CisgICAgaWYgKCFyZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUKKyAgICAgICAgfHwg
cmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlLT5iaW5kSW50KDEsICp0YXJnZXRSZXN1bHQu
c2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorICAgIAorICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1l
IG1vc3RSZWNlbnRJbnRlcmFjdGlvbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQsIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25RdWVyeSwgInNldFVzZXJJbnRlcmFjdGlvbiJfcyk7CisgICAgaWYgKCFzY29wZWRT
dGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIGhhZFVzZXJJ
bnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+Ymlu
ZERvdWJsZSgyLCBtb3N0UmVjZW50SW50ZXJhY3Rpb24uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgz
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNl
ckludGVyYWN0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFj
dGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYm9vbCBkaWRIYXZlUHJldmlvdXNVc2Vy
SW50ZXJhY3Rpb24gPSBoYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBPcGVyYXRpbmdEYXRl
c1dpbmRvdzo6TG9uZyk7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwgV2Fs
bFRpbWU6Om5vdygpKTsKKworICAgIGlmIChkaWRIYXZlUHJldmlvdXNVc2VySW50ZXJhY3Rpb24p
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICB1cGRhdGVDb29raWVCbG9ja2luZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKKworICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXRhcmdldFJlc3VsdC5z
ZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwg
eyB9KTsKKworICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFjY2VzcyA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIGRvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFyZW1vdmVTdG9yYWdlQWNjZXNzCisg
ICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5z
ZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBVcGRhdGUgY29va2llIGJsb2NraW5nIHVuY29u
ZGl0aW9uYWxseSBzaW5jZSBhIGNhbGwgdG8gaGFzSGFkVXNlckludGVyYWN0aW9uKCkKKyAgICAv
LyB0byBjaGVjayB0aGUgcHJldmlvdXMgdXNlciBpbnRlcmFjdGlvbiBzdGF0dXMgY291bGQgY2Fs
bCBjbGVhclVzZXJJbnRlcmFjdGlvbigpLAorICAgIC8vIGJsb3dpbmcgdGhlIGNhbGwgc3RhY2su
CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93
IG9wZXJhdGluZ0RhdGVzV2luZG93KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQsIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
aGFzSGFkVXNlckludGVyYWN0aW9uIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKTsKKyAgICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsK
KworICAgIGlmIChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBz
ZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBT
ZXQgdGltZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdworICAg
ICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgor
ICAgICAgICBjbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7CisgICAgICAgIGhh
ZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gaGFkVXNlckludGVy
YWN0aW9uOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
CisKKyAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChkb21haW4pOworICAg
IGlmICghcmVnaXN0cmFibGVEb21haW5JRCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2UgZG9tYWluSUQgc2hvdWxkIGV4aXN0IGJ1dCB3YXMgbm90IGZvdW5kLiIs
IHRoaXMpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8gc2NvcGVkVXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQg
PSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dCwgdXBkYXRlUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgInNldFByZXZhbGVudFJlc291cmNlIl9z
KTsKKyAgICBpZiAoIXNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50CisgICAg
ICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEs
IDEpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzY29wZWRV
cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1l
bnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIHVwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2UgdXBkYXRlVmVyeVByZXZh
bGVudFJlc291cmNlIl9zKTsKKyAgICBpZiAobmV3UHJldmFsZW5jZSA9PSBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpWZXJ5SGlnaCkgeworICAgICAgICBpZiAoIXNjb3BlZFVwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudAorICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVBy
ZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2Vz
OworICAgIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRv
VGhpc0RvbWFpbigqcmVnaXN0cmFibGVEb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25T
b3VyY2VzLCAwKTsKKyAgICBzZXREb21haW5zQXNQcmV2YWxlbnQoV1RGTW92ZShub25QcmV2YWxl
bnRSZWRpcmVjdGlvblNvdXJjZXMpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYgZG9tYWlucykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9t
YWluSUQgSU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5z
VG9VcGRhdGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVu
dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChj
b25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBpZiAoZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKSkgeworICAg
ICAgICBtX2RhdGFSZWNvcmRSZW1vdmFsQ29tcGxldGlvbkhhbmRsZXJzLmFwcGVuZChbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERv
bWFpbnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnM7CisgICAgd2hpbGUgKHNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGRvbWFpbnMuYXBwZW5kKHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSk7CisgICAgc3RkOjpzb3J0KGRvbWFpbnMuYmVnaW4o
KSwgZG9tYWlucy5lbmQoKSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4pOworCisgICAg
U3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZCgiUmVzb3VyY2UgbG9hZCBz
dGF0aXN0aWNzOlxuXG4iKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpCisgICAg
ICAgIHJlc291cmNlVG9TdHJpbmcocmVzdWx0LCBkb21haW4pOworCisgICAgYXV0byB0aGlyZFBh
cnR5RGF0YSA9IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpOworICAgIGlmICghdGhpcmRQYXJ0
eURhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxuSVRQIERhdGE6XG4i
KTsKKyAgICAgICAgZm9yIChhdXRvIHRoaXJkUGFydHkgOiB0aGlyZFBhcnR5RGF0YSkKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQodGhpcmRQYXJ0eS50b1N0cmluZygpLCAnXG4nKTsKKyAgICB9
CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0LnRvU3RyaW5nKCkpOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4oU1FMaXRl
U3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUmIHByZWRpY2F0ZVN0YXRlbWVudCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmICghcHJlZGljYXRlU3RhdGVtZW50CisgICAgICAgIHx8IHByZWRpY2F0
ZVN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
ICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2lzUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImlzUHJl
dmFsZW50UmVzb3VyY2UiX3MpOworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihz
Y29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKHNob3VsZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCwgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImlzVmVy
eVByZXZhbGVudFJlc291cmNlIl9zKTsKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21h
aW4oc2NvcGVkU3RhdGVtZW50LCBkb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291
cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZy
YW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQsIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
Il9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9t
YWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVj
dGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVu
dCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1ZXJ5LCAiaXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvIl9zKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKHNjb3Bl
ZFN0YXRlbWVudCwgZG9tYWluSUQocmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9E
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQsIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSwgImNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UiX3MpOworICAgIAorICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3Bl
ZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIHdhcyBu
b3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIHVwZGF0ZUdy
YW5kZmF0aGVyZWRRdWVyeSwgInNldEdyYW5kZmF0aGVyZWQiX3MpOworICAgIGlmICghc2NvcGVk
U3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCB2YWx1ZSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9t
YWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVJc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsU3RhdGVtZW50LCB1cGRhdGVJc1NjaGVkdWxlZEZvckFsbEJ1dENv
b2tpZURhdGFSZW1vdmFsUXVlcnksICJzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFS
ZW1vdmFsIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK1NlY29uZHMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4pOworICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5JRCh0b3BGcmFtZURv
bWFpbik7CisKKyAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZyYW1lRG9tYWluSUQp
CisgICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlz
dGluZ1RpbWVzdGFtcCB9OworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+
c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVu
dCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICp0b3BGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDYsICp0b3BGcmFt
ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gU2Vjb25kcyB7IFJlc291cmNlTG9hZFN0YXRpc3RpY3M6Ok5vRXhp
c3RpbmdUaW1lc3RhbXAgIH07CisgICAgfQorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU2Vjb25kcyB7IFJlc291cmNlTG9hZFN0
YXRpc3RpY3M6Ok5vRXhpc3RpbmdUaW1lc3RhbXAgIH07CisKKyAgICByZXR1cm4gU2Vjb25kcyB7
IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDApIH07Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faXNHcmFu
ZGZhdGhlcmVkU3RhdGVtZW50LCBpc0dyYW5kZmF0aGVyZWRRdWVyeSwgImlzR3JhbmRmYXRoZXJl
ZCJfcyk7CisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVu
dCwgZG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVE
b21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJl
Z2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Cisg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNl
cnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZvciBj
b25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9y
IHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qo
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworICAgIGlmICghcmVzdWx0
LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQi
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGb3IgY29uc2lzdGVuY3ks
IG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZy
YW1lIGRvbWFpbi4KKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0
b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsK
KyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyB3YXMg
bm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2Ug
YWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwg
KnJlc3VsdC5zZWNvbmQpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
IHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4p
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVz
b3VyY2VEb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20gd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0
YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNv
bmQpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29u
c3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2Fj
dGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJl
c3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiBy
ZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwor
CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBo
YXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0
LnNlY29uZCk7Cit9CisKK3N0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OkFk
ZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgeworICAgICAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNj
b3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9t
U3RyaW5nUXVlcnksICJlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
biJfcyk7CisgICAgICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIDAg
fTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHNjb3BlZFN0YXRl
bWVudC0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5v
LCBkb21haW5JRCB9OworICAgICAgICB9CisgICAgfQorCisgICAgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyBuZXdPYnNlcnZhdGlvbihkb21haW4pOworICAgIGF1dG8gcmVzdWx0ID0gaW5zZXJ0T2Jz
ZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24pOworCisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IEFkZGVk
UmVjb3JkOjpObywgc3RkOjpudWxsb3B0IH07CisgICAgfQorCisgICAgcmV0dXJuIHsgQWRkZWRS
ZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKS52YWx1ZSgpIH07Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMoKQoreworICAgIG1f
ZGF0YWJhc2UuY2xlYXJBbGxUYWJsZXMoKTsKKworICAgIGlmICghY3JlYXRlU2NoZW1hKCkpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiwgZGF0YWJhc2UgcGF0aDogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikK
K3sKKyAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4pOworICAgIGlm
ICghZG9tYWluSURUb1JlbW92ZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxsRGF0YVN0YXRl
bWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJfcyk7CisgICAg
aWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
bW92ZURhdGFGb3JEb21haW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphbGxEb21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRlbWVudCwgZ2V0QWxsRG9tYWlu
c1F1ZXJ5LCAiYWxsRG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnM7
CisgICAgd2hpbGUgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIGRvbWFpbnMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9t
UmVnaXN0cmFibGVEb21haW5TdHJpbmcoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7
CisgICAgcmV0dXJuIGRvbWFpbnM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBjbGVhckRhdGFiYXNl
Q29udGVudHMoKTsKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CisKKyAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKKworICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERl
bGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsK
KyAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7
IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwg
eyB9IH07CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2Nr
LCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6YXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29uc3QgVG9w
RnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIGlmICh0aGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlKCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICh0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
KCkgPT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsT25TaXRlc1dpdGhvdXRVc2Vy
SW50ZXJhY3Rpb24gJiYgIWhhc0hhZFVzZXJJbnRlcmFjdGlvbih0b3BGcmFtZURvbWFpbiwgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworQ29va2llQWNjZXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y29va2llQWNjZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnBy
ZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcyk7CisgICAg
aWYgKCFzdGF0ZW1lbnQgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdWJyZXNvdXJjZURvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKworICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7CisgICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
KworICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKKworICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OworCisgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKK30K
KworU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCByZXF1
ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihmaXJzdFBhcnR5
RG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0Vf
TE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQgd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm4g
U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKyAgICB9CisKKyAgICBhdXRvIGZpcnN0
UGFydHlQcmltYXJ5RG9tYWluSUQgPSAqcmVzdWx0LnNlY29uZDsKKworICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/IEFORCB0
b3BMZXZlbERvbWFpbklEID0gPyJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsIHJlcXVlc3RpbmdEb21haW5JRCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87CisKKyAg
ICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA/IFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93bjo6WWVzIDogU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKK30KKworVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFp
bnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1
bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2
YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24gPSAwIl9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LT5jb2x1bW5UZXh0KDApKSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisK
K1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpk
b21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0
czsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFs
ZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMSJfcyk7CisgICAgaWYgKCFzdGF0ZW1l
bnQpCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQt
PnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJs
ZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRl
bWVudC0+Y29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1ZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3Vs
dHM7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDAp
KSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworSGFzaE1hcDxUb3BGcmFtZURvbWFpbiwg
U3ViUmVzb3VyY2VEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9t
YWluIEZST00gKFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBz
LnRvcExldmVsRG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBhcyBvIElOTkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMg
V0hFUkUgby5kb21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERv
bWFpbnMgT04gZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKKyAgICBpZiAoIXN0
YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICB3aGlsZSAoc3RhdGVtZW50
LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVE
b21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOworCisg
ICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciA9IHRoaXMtPmRvbWFpbnNUb0Js
b2NrQW5kRGVsZXRlQ29va2llc0ZvcigpOworICAgIGF1dG8gZG9tYWluc1RvQmxvY2tCdXRLZWVw
Q29va2llc0ZvciA9IHRoaXMtPmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IoKTsKKyAg
ICBhdXRvIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5ID0gdGhpcy0+ZG9t
YWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKTsKKyAgICBhdXRvIGRvbWFpbnNX
aXRoU3RvcmFnZUFjY2VzcyA9IHRoaXMtPmRvbWFpbnNXaXRoU3RvcmFnZUFjY2VzcygpOworCisg
ICAgaWYgKGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc0VtcHR5KCkgJiYgZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkuaXNFbXB0eSgpICYmIGRvbWFpbnNXaXRoU3RvcmFnZUFj
Y2Vzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tDb29raWVzRm9y
IGRvbWFpbnNUb0Jsb2NrIHsgZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLCBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLCBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFz
Rmlyc3RQYXJ0eSwgZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzIH07CisKKyAgICBpZiAoZGVidWdM
b2dnaW5nRW5hYmxlZCgpICYmICghZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlz
RW1wdHkoKSB8fCAhZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5pc0VtcHR5KCkpKQor
ICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoIkFwcGx5aW5nIGNyb3NzLXNpdGUgdHJh
Y2tpbmcgcmVzdHJpY3Rpb25zIiwgZG9tYWluc1RvQmxvY2spOworCisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtl
UmVmKHN0b3JlKCkpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9C
bG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgp
IG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Js
b2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCBzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUo
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHdlYWtUaGlzLT5kZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJEb25lIGFwcGx5aW5nIGNyb3NzLXNp
dGUgdHJhY2tpbmcgcmVzdHJpY3Rpb25zLiIpOworICAgICAgICAgICAgICAgICAgICB3ZWFrVGhp
cy0+ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1Zywg
TWVzc2FnZUxldmVsOjpJbmZvLCAiW0lUUF0gRG9uZSBhcHBseWluZyBjcm9zcy1zaXRlIHRyYWNr
aW5nIHJlc3RyaWN0aW9ucy4iX3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0p
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6RG9tYWluRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBW
ZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKKyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRm
YXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCwgY291bnRPZlRv
cEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQgSk9JTiAoU0VMRUNUIHNv
dXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgZnJvbSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IEdS
T1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9tYWluSUQgPSBkb21haW5J
RCJfcyk7CisgICAgaWYgKCFzdGF0ZW1lbnQpCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAg
IAorICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC0+Y29sdW1u
SW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRlbWVudC0+Y29sdW1uRG91
YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCgzKSA/IHRydWUgOiBm
YWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KSA/IHRydWUgOiBmYWxz
ZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/IHRydWUgOiBmYWxzZQor
ICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5jb2x1bW5JbnQo
NikpCisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVj
dG9yPHVuc2lnbmVkPiYmIGRvbWFpbklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoZG9tYWluSURz
VG9DbGVhcik7CisKKyAgICBhdXRvIGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9D
bGVhciwgIikiKSk7CisgICAgaWYgKCFjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJHcmFu
ZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0df
U1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRh
dGEmIHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRl
c1dpbmRvdykKK3sKKyAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9u
ICYmIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lLCBvcGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKKworICAgICAgICAvLyBE
cm9wIHByaXZhY3kgc2Vuc2l0aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAg
ICAgIGlmIChvcGVyYXRpbmdEYXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykKKyAgICAgICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsV2Vic2l0
ZURhdGFGb3IoY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJvb2wgc2hvdWxk
Q2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICByZXR1cm4gaXNQcmV2YWxlbnRSZXNvdXJj
ZShyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikgJiYgIWhhc0hhZFVuZXhwaXJl
ZFJlY2VudFVzZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYywgT3BlcmF0aW5nRGF0ZXNX
aW5kb3c6OkxvbmcpICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhcmVzb3Vy
Y2VTdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxCdXRDb29raWVzRm9yKGNvbnN0IERvbWFpbkRhdGEm
IHJlc291cmNlU3RhdGlzdGljLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpCit7
CisgICAgYm9vbCBpc1JlbW92YWxFbmFibGVkID0gZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGUoKSAhPSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZSB8fCByZXNv
dXJjZVN0YXRpc3RpYy5pc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOworICAg
IGJvb2wgaXNSZXNvdXJjZUdyYW5kZmF0aGVyZWQgPSBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nICYmIHJlc291cmNlU3RhdGlzdGljLmdyYW5kZmF0aGVyZWQ7CisKKyAgICBPcGVyYXRpbmdE
YXRlc1dpbmRvdyB3aW5kb3cgeyB9OworICAgIHN3aXRjaCAoZmlyc3RQYXJ0eVdlYnNpdGVEYXRh
UmVtb3ZhbE1vZGUoKSkgeworICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1v
ZGU6OkFsbEJ1dENvb2tpZXM6CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgRmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmU6CisgICAgICAgIHdpbmRvdyA9IE9wZXJh
dGluZ0RhdGVzV2luZG93OjpTaG9ydDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llc0xpdmVPblRlc3RpbmdUaW1l
b3V0OgorICAgICAgICB3aW5kb3cgPSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yTGl2ZU9uVGVz
dGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1v
dmFsTW9kZTo6QWxsQnV0Q29va2llc1JlcHJvVGVzdGluZ1RpbWVvdXQ6CisgICAgICAgIHdpbmRv
dyA9IE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JSZXByb1Rlc3Rpbmc7CisgICAgfQorCisgICAg
cmV0dXJuIGlzUmVtb3ZhbEVuYWJsZWQgJiYgIWlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkICYmICFo
YXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMsIHdp
bmRvdyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRFbmZv
cmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJvb2wg
c2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICBpZiAoKCFpc1NhbWVTaXRlU3Ry
aWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZv
clNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKKyAg
ICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VTdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChyZXNv
dXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0c0ZvclNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKKyAgICAgICAgY2xlYXJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoY29u
c3QgRG9tYWluRGF0YSYgc3RhdGlzdGljKQoreworICAgIGlmIChzdGF0aXN0aWMubW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDw9IDApCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOworfQorCitSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
Z2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JH
cmFuZGZhdGhlcmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1l
Ojpub3coKTsKKyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hl
Y2tGb3JHcmFuZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CisK
KyAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAgY2xlYXJFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7CisKKyAgICBhdXRvIG5vdyA9IFdhbGxUaW1lOjpub3co
KTsKKyAgICBhdXRvIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IG5vdzsKKyAgICBSZWdpc3RyYWJs
ZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciB0b0RlbGV0ZU9yUmVzdHJp
Y3RGb3I7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKKworICAgIFZlY3RvcjxEb21haW5EYXRhPiBkb21haW5zID0gdGhpcy0+ZG9t
YWlucygpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVy
aW5nOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogZG9tYWlucykgeworICAgICAgICBpZiAo
c2hvdWxkRXhlbXB0RnJvbVdlYnNpdGVEYXRhRGVsZXRpb24oc3RhdGlzdGljLnJlZ2lzdHJhYmxl
RG9tYWluKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYXV0byBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9IHRoaXMtPm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKHN0YXRpc3RpYykpCisgICAgICAgICAgICBvbGRlc3RVc2VySW50ZXJhY3Rpb24gPSBzdGQ6
Om1pbihvbGRlc3RVc2VySW50ZXJhY3Rpb24sICptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSk7CisgICAgICAgIGlmIChzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihzdGF0aXN0aWMs
IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CisgICAgICAgICAgICB0b0RlbGV0ZU9y
UmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsQ29va2llc0Zvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5k
b21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGlj
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChz
aG91bGRSZW1vdmVBbGxCdXRDb29raWVzRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKKyAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbik7CisgICAgICAgICAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJp
Y3RGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9FbmZvcmNlU2FtZVNpdGVT
dHJpY3RGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiU2NoZWR1bGVkICUiIFBVQkxJ
Q19MT0dfU1RSSU5HICIgdG8gaGF2ZSBpdHMgY29va2llcyBzZXQgdG8gU2FtZVNpdGU9c3RyaWN0
LiIsIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJTY2hlZHVs
ZWQgJyIsIHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKSwgIicgdG8gaGF2ZSBp
dHMgY29va2llcyBzZXQgdG8gU2FtZVNpdGU9c3RyaWN0Jy4iKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQorICAgICAgICAgICAgZG9tYWlu
SURzVG9DbGVhckdyYW5kZmF0aGVyaW5nLmFwcGVuZChzdGF0aXN0aWMuZG9tYWluSUQpOworICAg
IH0KKworICAgIC8vIEdpdmUgdGhlIHVzZXIgZW5vdWdoIHRpbWUgdG8gaW50ZXJhY3Qgd2l0aCB3
ZWJzaXRlcyB1bnRpbCB3ZSByZW1vdmUgbm9uLWNvb2tpZSB3ZWJzaXRlIGRhdGEuCisgICAgaWYg
KCFwYXJhbWV0ZXJzKCkuaXNSdW5uaW5nVGVzdCAmJiBub3cgLSBvbGRlc3RVc2VySW50ZXJhY3Rp
b24gPCBwYXJhbWV0ZXJzKCkubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKQor
ICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2ll
V2Vic2l0ZURhdGFGb3IuY2xlYXIoKTsKKworICAgIGNsZWFyR3JhbmRmYXRoZXJpbmcoV1RGTW92
ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1cm4gdG9E
ZWxldGVPclJlc3RyaWN0Rm9yOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVu
dCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3Mp
OworICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGNvdW50
ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7CisKKyAgICBpZiAoY291bnQgPD0gcGFy
YW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4
U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3Vu
dCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKGNvdW50TGVm
dFRvUHJ1bmUpOworCisgICAgYXV0byByZWNvcmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZ
IGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwor
ICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwgcmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291
bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4g
ZW50cmllc1RvUHJ1bmU7CisgICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgZW50cmllc1RvUHJ1bmUuYXBwZW5kKHJlY29yZHNUb1BydW5lLT5j
b2x1bW5JbnQoMCkpOworCisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChlbnRyaWVz
VG9QcnVuZSk7CisKKyAgICBhdXRvIHBydW5lQ29tbWFuZCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiREVMRVRFIGZyb20gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IGRvbWFpbklEIElOICgiLCBsaXN0VG9QcnVuZSwgIikiKSk7CisgICAgaWYgKCFwcnVuZUNvbW1h
bmQgfHwgcHJ1bmVDb21tYW5kLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRh
dGVMYXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOworICAgIGlmICghc2NvcGVkU3Rh
dGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vl
bi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vl
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAg
ICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVu
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVMYXN0U2Vlbihkb21haW4s
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHNob3VsZFNraXAoZG9tYWlu
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCFyZXN1
bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9t
YWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgaW50IHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVtZW50LCB1cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRRdWVyeSwgInVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZCJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
K30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViZnJhbWVEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBhdXRvIHN1YkZyYW1lVW5k
ZXJUb3BGcmFtZUNvdW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3ViZnJh
bWVVbmRlclRvcEZyYW1lUXVlcnkpOworICAgIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
Q291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVRdWVyeSk7CisgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5KTsKKyAgICAKKyAgICBpZiAoIXN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50IHx8
ICFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCB8fCAhc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGlu
ZyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHN1
YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9t
YWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3ViRnJhbWVVbmRlclRvcEZy
YW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgxLCBkb21haW5JRChzdWJmcmFtZURv
bWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8tPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZhbHVlKCkp
ICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNz
VGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RS
SU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAg
ICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cK
KyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElU
RV9ST1cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gKHN1YkZyYW1l
VW5kZXJUb3BGcmFtZUNvdW50LT5jb2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+Y29sdW1uSW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+Y29sdW1uSW50KDApID09IDEpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRCb29s
ZWFuKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxh
ZykKK3sKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlll
cyIgOiAiTm8iKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZW50cnkpCit7CisgICAgYnVpbGRlci5hcHBlbmQo
IiAgICAgICAgIiwgZW50cnksICdcbicpOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQgZG9tYWluSUQp
IGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQgPSBlbXB0eVN0cmluZygpOworICAgIAorICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEU3RhdGVtZW50LCBkb21haW5TdHJpbmdGcm9tRG9tYWluSURRdWVyeSwgImdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5J
RC4gU3RhdGVtZW50IGZhaWxlZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgcmVzdWx0ID0gbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0ZW1lbnQtPmNv
bHVtblRleHQoMCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQVNDSUlMaXRlcmFs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAoreworICAgIGlmICh0YWJsZU5hbWUgPT0gIlN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJldHVybiAiU0VMRUNU
IHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgZG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZyb20g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7Cisg
ICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKKyAgICAg
ICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09
ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCBm
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21h
aW5JRCA9ID8iX3M7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyIpCisgICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQg
ZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWlu
SUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiKQorICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20gU3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJfczsK
KyAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIikK
KyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7Cisg
ICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCisgICAg
ICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5h
bWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCisgICAgICAgIHJldHVybiAi
U0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICAKKyAgICByZXR1cm4gIiJfczsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3Rp
Y0xpc3QoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNv
bnN0IFN0cmluZyYgZG9tYWluKSBjb25zdAoreworICAgIGF1dG8gcXVlcnkgPSBnZXRTdWJTdGF0
aXN0aWNTdGF0ZW1lbnQodGFibGVOYW1lKTsKKyAgICAKKyAgICBpZiAoIXF1ZXJ5Lmxlbmd0aCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBkYXRhID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50KHF1ZXJ5KTsKKyAgICAKKyAgICBpZiAoIWRhdGEgfHwgZGF0YS0+YmluZElu
dCgxLCBkb21haW5JRChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbUhvc3Qo
ZG9tYWluKSkudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cHBlbmRTdWJTdGF0aXN0aWNMaXN0LiBTdGF0ZW1lbnQgZmFpbGVkIHRvIHByZXBhcmUgb3IgYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRhdGEtPnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYnVpbGRlci5hcHBlbmQoIiAgICAiLCB0YWJs
ZU5hbWUsICI6XG4iKTsKKyAgICAKKyAgICBhdXRvIHJlc3VsdCA9IGdldERvbWFpblN0cmluZ0Zy
b21Eb21haW5JRChkYXRhLT5jb2x1bW5JbnQoMCkpOworICAgIGFwcGVuZE5leHRFbnRyeShidWls
ZGVyLCByZXN1bHQpOworICAgIAorICAgIHdoaWxlIChkYXRhLT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICByZXN1bHQgPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+
Y29sdW1uSW50KDApKTsKKyAgICAgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7
CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBoYXNIYWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oV1RG
OjpTZWNvbmRzIGludGVyYWN0aW9uVGltZVNlY29uZHMpCiB7Ci0gICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOwotICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOwotICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
Ci0gICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7Ci0gICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKKyAgICByZXR1cm4gaW50ZXJhY3Rpb25UaW1lU2Vjb25kcyA+IFNlY29uZHMo
MCkgJiYgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBpbnRlcmFjdGlvblRp
bWVTZWNvbmRzIDwgMjRfaDsKIH0KIAotT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2Rh
eSgpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzb3VyY2VUb1N0cmluZyhT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3QKIHsKLSAg
ICByZXR1cm4gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Cisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAicmVzb3VyY2VUb1N0cmluZyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4pICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nLiBTdGF0ZW1lbnQgZmFpbGVk
IHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYnVp
bGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwgZG9tYWluLCAnXG4nKTsKKyAgICAK
KyAgICAvLyBVc2VyIGludGVyYWN0aW9uCisgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaGFk
VXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
bjogIik7CisgICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKG1fZ2V0
UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoTW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIndp
dGhpbiAyNCBob3VycyIpOworICAgIGVsc2UKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0xIik7
CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAi
Z3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
CisKKyAgICAvLyBTdG9yYWdlIGFjY2VzcworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVp
bGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIsIGRvbWFpbik7CisKKyAg
ICAvLyBUb3AgZnJhbWUgc3RhdHMKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIs
ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWluKTsKKyAgICBhcHBlbmRTdWJTdGF0
aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0
KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20iLCBkb21haW4pOworICAgIGFw
cGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiVG9wRnJh
bWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7CisKKyAgICBhcHBlbmRCb29sZWFu
KGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIiwgbV9nZXRS
ZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChJc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKKworICAgIC8vIFN1YmZyYW1lIHN0YXRzCisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChi
dWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyIsIGRvbWFpbik7CisKKyAgICAv
LyBTdWJyZXNvdXJjZSBzdGF0cworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwg
IlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBkb21haW4pOworICAgIGFwcGVuZFN1
YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iLCBk
b21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7CisKKyAgICAvLyBQcmV2YWxlbnQgUmVzb3Vy
Y2UKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1ByZXZhbGVudFJlc291cmNlIiwgbV9n
ZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYXBwZW5kQm9vbGVhbihi
dWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9t
YWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KSk7CisgICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYnVpbGRlci5hcHBlbmQoIiAgICBkYXRhUmVjb3Jk
c1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1
bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4n
KTsKIH0KIAotU2Vjb25kcyBPcGVyYXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFi
YXNlKGludCBkb21haW5JRCkKIHsKLSAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9t
MTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworICAg
IGF1dG8gc2NvcGVkTGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCwgbGlua0RlY29yYXRpb25F
eGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSJfcyk7CisgICAgYXV0byBzY29w
ZWRTY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCwgc2NyaXB0TG9hZEV4aXN0c1F1ZXJ5LCAiZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlIGxpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICBh
dXRvIHNjb3BlZFN1YkZyYW1lRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQsIHN1YkZyYW1lRXhpc3RzUXVlcnksICJkb21haW5J
REV4aXN0c0luRGF0YWJhc2Ugc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIGF1dG8g
c2NvcGVkU3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQo
bV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCwgc3ViUmVzb3VyY2VFeGlzdHNRdWVyeSwgImRv
bWFpbklERXhpc3RzSW5EYXRhYmFzZSBzdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCJfcyk7Cisg
ICAgYXV0byBzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LCB1bmlxdWVSZWRpcmVj
dEV4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlIHVuaXF1ZVJlZGlyZWN0RXhp
c3RzU3RhdGVtZW50Il9zKTsKKyAgICBhdXRvIHNjb3BlZE9ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudCwgb2JzZXJ2ZWREb21haW5zRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0
YWJhc2Ugb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICAKKyAgICBpZiAo
IXNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8ICFzY29wZWRT
Y3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8ICFzY29wZWRTdWJGcmFtZUV4aXN0
c1N0YXRlbWVudAorICAgICAgICB8fCAhc2NvcGVkU3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQK
KyAgICAgICAgfHwgIXNjb3BlZFVuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50CisgICAgICAg
IHx8ICFzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgbV9s
aW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJ
bnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3NjcmlwdExvYWRFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEs
IGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRl
bWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3Vi
UmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
dW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudC0+Ymlu
ZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpk
b21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfUk9XCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+c3RlcCgp
ICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVu
dC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0
c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwgbV9vYnNlcnZlZERv
bWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIHN0ZXAsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1l
bnQtPmNvbHVtbkludCgwKSB8fCBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKSB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgfHwgbV9zdWJS
ZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fdW5pcXVlUmVkaXJlY3RF
eGlzdHNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0
YXRlbWVudC0+Y29sdW1uSW50KDApOwogfQogCi1ib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9y
PT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCkKIHsKLSAgICBy
ZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIu
bV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOworICAgIGF1dG8gY291bnRPcGVyYXRp
bmdEYXRlc1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gT3BlcmF0aW5nRGF0ZXM7Il9zKTsKKyAgICBhdXRvIGdldE1vc3RSZWNlbnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxF
Q1QgKiBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywg
bW9udGhEYXkgREVTQyBMSU1JVCAxOyJfcyk7CisgICAgYXV0byBnZXRPcGVyYXRpbmdEYXRlV2lu
ZG93U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKiBGUk9N
IE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIgREVTQywgbW9udGggREVTQywgbW9udGhEYXkg
REVTQyBMSU1JVCAxIE9GRlNFVCA/OyJfcyk7CisKKyAgICBpZiAoIWNvdW50T3BlcmF0aW5nRGF0
ZXNTdGF0ZW1lbnQgfHwgY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycyBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50IGZhaWxlZCB0byBzdGVwLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fb3BlcmF0aW5nRGF0ZXNTaXplID0gY291bnRPcGVyYXRpbmdEYXRl
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApOworCisgICAgaWYgKCFnZXRNb3N0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCB8fCBnZXRNb3N0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJh
dGluZ0RhdGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVk
IHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBP
cGVyYXRpbmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCksIGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworCisg
ICAgaWYgKCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7CisgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudCBmYWlsZWQgZHVyaW5nIHRoZSBjYWxsIHRvIHByZXBhcmUoKSB3aXRoIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiIsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRp
bmdEYXRlc1dpbmRvd1Nob3J0IC0gMSkKKyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0Rh
dGUgPSBzdGQ6Om51bGxvcHQ7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQg
LSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dT
dGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4i
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
c2hvcnRXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29s
dW1uSW50KDIpKTsKKyAgICB9CisKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPD0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkKKyAgICAgICAgbV9sb25nV2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBlbHNlIHsKKyAgICAgICAgZ2V0T3BlcmF0aW5nRGF0
ZVdpbmRvd1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVX
aW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIC0gMSkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVw
ZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVt
ZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLiBU
aGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBvciBzdGVwKCkuIiwgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2xvbmdX
aW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRPcGVyYXRpbmdEYXRlV2luZG93
U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQt
PmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50
KDIpKTsKKyAgICB9CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8KGNvbnN0IE9w
ZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKIHsKLSAgICByZXR1
cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byB0b2RheSA9IE9wZXJh
dGluZ0RhdGU6OnRvZGF5KCk7CisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplID4gMCkgewor
ICAgICAgICBpZiAodG9kYXkgPD0gbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGludCByb3dzVG9QcnVuZSA9IG1fb3BlcmF0
aW5nRGF0ZXNTaXplIC0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nICsgMTsKKyAgICBpZiAocm93
c1RvUHJ1bmUgPiAwKSB7CisgICAgICAgIGF1dG8gZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBP
cGVyYXRpbmdEYXRlcyBPUkRFUiBCWSB5ZWFyLCBtb250aCwgbW9udGhEYXkgTElNSVQgPzsiX3Mp
OworICAgICAgICBpZiAoIWRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAor
ICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5i
aW5kSW50KDEsIHJvd3NUb1BydW5lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IGRlbGV0
ZUxlYXN0UmVjZW50T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRl
SWZOZWNlc3NhcnkgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxl
ZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYXV0byBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgT1IgSUdOT1JF
IElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VMRUNUID8sID8s
ID87Il9zKTsKKyAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAg
fHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgxLCB0b2RheS55ZWFyKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5i
aW5kSW50KDIsIHRvZGF5Lm1vbnRoKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbnNlcnRP
cGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDMsIHRvZGF5Lm1vbnRoRGF5KCkpICE9IFNR
TElURV9PSworICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3Bl
cmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVk
IHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKworICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOwogfQogCi1ib29s
IE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGly
ZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVz
V2luZG93IG9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25zdAogewotICAgIHJldHVybiBzZWNvbmRz
U2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBzd2l0Y2ggKG9wZXJhdGluZ0RhdGVzV2luZG93KSB7
CisgICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZzoKKyAgICAgICAgaWYgKG1fbG9u
Z1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT3BlcmF0
aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgorICAgICAgICBpZiAobV9zaG9ydFdpbmRvd09wZXJhdGlu
Z0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9wZXJhdGluZ0RhdGVzV2luZG93
OjpGb3JMaXZlT25UZXN0aW5nOgorICAgICAgICByZXR1cm4gV2FsbFRpbWU6Om5vdygpID4gbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVyYXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9u
VGVzdGluZzsKKyAgICBjYXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIElmIHdlIGRvbid0IG1lZXQg
dGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBjaGVjayB0aGUgdXNl
ciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBmb3IgdGVzdGluZyku
CisgICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKSB7
CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBTdXNwZW5kYWJsZVdv
cmtRdWV1ZSYgd29ya1F1ZXVlLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0IHNob3VsZEluY2x1ZGVM
b2NhbGhvc3QpCi0gICAgOiBtX3N0b3JlKHN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1
ZXVlKQotICAgICwgbV9zaG91bGRJbmNsdWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRp
c3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgdW5zaWduZWQg
bnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9v
bCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50
KQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIC8vIFBvcHVsYXRlIHRo
ZSBPcGVyYXRpbmcgRGF0ZXMgdGFibGUgd2l0aCBlbm91Z2ggZGF5cyB0byByZXF1aXJlIHBydW5p
bmcuCisgICAgZG91YmxlIGRheXNBZ29JblNlY29uZHMgPSAwOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDw9IG51bWJlck9mT3BlcmF0aW5nRGF5c1Bhc3NlZDsgaSsrKSB7Cisg
ICAgICAgIGRvdWJsZSBkYXlzVG9TdWJ0cmFjdCA9IFNlY29uZHM6OmZyb21Ib3VycygyNCAqIGkp
LnZhbHVlKCk7CisgICAgICAgIGRheXNBZ29JblNlY29uZHMgPSBXYWxsVGltZTo6bm93KCkuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIC0gZGF5c1RvU3VidHJhY3Q7CisgICAgICAgIGF1dG8g
ZGF0ZVRvSW5zZXJ0ID0gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhkYXlzQWdvSW5TZWNvbmRzKSk7CisKKyAgICAgICAgYXV0byBpbnNlcnRPcGVy
YXRpbmdEYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQg
T1IgSUdOT1JFIElOVE8gT3BlcmF0aW5nRGF0ZXMgKHllYXIsIG1vbnRoLCBtb250aERheSkgU0VM
RUNUID8sID8sID87Il9zKTsKKyAgICAgICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50CisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50
KDEsIGRhdGVUb0luc2VydC55ZWFyKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5z
ZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCBkYXRlVG9JbnNlcnQubW9udGgo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5iaW5kSW50KDMsIGRhdGVUb0luc2VydC5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklE
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0
aWNGb3JUZXN0aW5nIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5yZXNldCgpOworICAg
IH0KKworICAgIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycygpOworCisgICAgLy8gTWFr
ZSBzdXJlIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIGlzIHRoZSBsZWFzdCByZWNlbnQg
b2YgYWxsIGVudHJpZXMuCisgICAgZGF5c0Fnb0luU2Vjb25kcyAtPSBTZWNvbmRzOjpmcm9tSG91
cnMoMjQpLnZhbHVlKCk7CisgICAgYXV0byBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVt
ZW50LCBpbnNlcnRPYnNlcnZlZERvbWFpblF1ZXJ5LCAiaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0Zv
clRlc3RpbmciX3MpOworICAgIGlmIChzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVu
dC0+YmluZFRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTGFzdFNlZW5JbmRleCwgZGF5c0Fnb0luU2Vjb25kcykgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50
KEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LCBoYXNVc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9P
SworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZERv
dWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBkYXlzQWdvSW5TZWNvbmRz
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0
ZW1lbnQtPmJpbmRJbnQoR3JhbmRmYXRoZXJlZEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElz
UHJldmFsZW50SW5kZXgsIGlzUHJldmFsZW50KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2Nv
cGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50
SW5kZXgsIGZhbHNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIDApICE9
IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVu
dC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25J
bmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUElJbmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3Rh
dGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
c2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGZhaWxl
ZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQogfQogCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQorc3RhdGljIFN0cmluZyBkb21haW5z
VG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKIHsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpKTsKKyAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi11bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQorc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29u
c3QgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3ImIGRv
bWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcikKIHsKLSAgICB1bnNpZ25lZCBp
bXBvcnRhbmNlID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRhbmNlOwot
ICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAg
aW1wb3J0YW5jZSAtPSAxOwotICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVy
YWN0aW9uKQotICAgICAgICBpbXBvcnRhbmNlIC09IDI7Ci0gICAgcmV0dXJuIGltcG9ydGFuY2U7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENv
b2tpZXNGb3IpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCBkb21haW4uc3RyaW5nKCksICIoYWxsIGRhdGEpIik7CisgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWluc1Rv
RGVsZXRlQWxsQnV0SHR0cE9ubHlDb29raWVzRm9yKQorICAgICAgICBidWlsZGVyLmFwcGVuZChi
dWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQg
SHR0cE9ubHkgY29va2llcykiKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1Jl
bW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVX
ZWJzaXRlRGF0YUZvcikKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgYnV0IGNvb2tpZXMpIik7CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2
YWx1ZSkKQEAgLTQ2MiwxOCArMzQ5Myw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKICAgICB9KTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
c3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3Rv
cmFnZUFjY2Vzcyhbc3RvcmUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTU0Miw2ICszNTYxLDUxOCBAQCBib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkRXhlbXB0RnJvbVdlYnNpdGVEYXRhRGVsZXRp
b24oY29uc3QgUmVnaQogICAgIHJldHVybiAhZG9tYWluLmlzRW1wdHkoKSAmJiAoZG9tYWluID09
IG1fc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluIHx8IG1fYXBwQm91bmREb21haW5zLmNvbnRh
aW5zKGRvbWFpbikpOwogfQogCisvLyBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50LgorCitQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmJ1aWxkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRGcm9tRGF0YWJhc2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJp
YnV0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJp
bmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+
Y29sdW1uSW50KDEpKTsKKyAgICBhdXRvIHNvdXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQo
Mik7CisgICAgYXV0byB0aW1lT2ZBZENsaWNrID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVD
bGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoNSkgOiBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgzKTsKKyAgICBhdXRvIHRv
a2VuID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRp
b25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDcpIDogc3RhdGVtZW50
LT5jb2x1bW5UZXh0KDQpOworICAgIGF1dG8gc2lnbmF0dXJlID0gYXR0cmlidXRpb25UeXBlID09
IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3Rh
dGVtZW50LT5jb2x1bW5UZXh0KDgpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDUpOworICAgIGF1
dG8ga2V5SUQgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtblRleHQoOSkgOiBzdGF0
ZW1lbnQtPmNvbHVtblRleHQoNik7CisKKyAgICBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBhdHRy
aWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlSUQoc291cmNl
SUQpLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZShSZWdpc3Ry
YWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNv
dXJjZVNpdGVEb21haW4pKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZGVzdGluYXRpb25TaXRlRG9tYWluKSksIHsgfSwg
eyB9LCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGltZU9mQWRDbGljaykpOworICAgIAorICAg
IGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlv
blR5cGU6OkF0dHJpYnV0ZWQpIHsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7CisgICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0
ZW1lbnQtPmNvbHVtbkludCg0KTsKKyAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDYpOworICAgICAgICBhdXRvIGRlc3Rp
bmF0aW9uRWFybGllc3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgx
MCk7CisKKyAgICAgICAgaWYgKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgIT0gLTEpCisgICAgICAg
ICAgICBhdHRyaWJ1dGlvbi5zZXRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25UcmlnZ2VyRGF0YSB7IHN0YXRpY19jYXN0PHVpbnQzMl90Pihh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6
OlByaW9yaXR5KHByaW9yaXR5KSB9KTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1l
PiBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQ7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRp
bWU+IGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kOworICAgICAgICAKKyAgICAgICAgLy8g
QSB2YWx1ZSBvZiAwLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcG9ydCBoYXMgYmVlbiBzZW50IHRv
IHRoZSByZXNwZWN0aXZlIHNpdGUuCisgICAgICAgIGlmIChzb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA+IDAuMCkKKyAgICAgICAgICAgIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IFdh
bGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7CisK
KyAgICAgICAgaWYgKGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCisg
ICAgICAgICAgICBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyhkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlKTsKKworICAgICAg
ICBhdHRyaWJ1dGlvbi5zZXRUaW1lc1RvU2VuZCh7IHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCwg
ZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgfSk7CisgICAgfQorCisgICAgYXR0cmlidXRp
b24uc2V0U291cmNlU2VjcmV0VG9rZW4oeyB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCB9KTsKKwor
ICAgIHJldHVybiBhdHRyaWJ1dGlvbjsKK30KKworc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25zdCBXZWJDb3JlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUmIGRlc3RpbmF0aW9u
U2l0ZSkKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKHNvdXJjZVNp
dGUucmVnaXN0cmFibGVEb21haW4pOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluSUQg
PSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVEb21haW4pOworCisgICAgaWYg
KCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQorICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQpOworCisg
ICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmluZFVuYXR0cmlidXRlZFF1ZXJ5
LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKKyAgICBpZiAoIWZpbmRVbmF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50IGZpbmRVbmF0dHJpYnV0ZWRRdWVyeSwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
YXV0byBmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50LCBmaW5kQXR0cmlidXRlZFF1ZXJ5LCAiZmluZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKKyAgICBpZiAoIWZpbmRBdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50CisgICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBmaW5k
QXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9t
YWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IGZpbmRBdHRyaWJ1dGVkUXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IHVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50OworICAgIGlmIChmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgdW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgPSBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKGZpbmRV
bmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCksIFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpVbmF0dHJpYnV0ZWQpOworCisgICAgc3RkOjpvcHRpb25hbDxBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDsKKyAgICBpZiAoZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKQorICAgICAgICBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
PSBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKGZpbmRBdHRyaWJ1dGVk
U2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZTo6QXR0cmlidXRlZCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIodW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9u
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUp
Cit7CisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisKKyAgICBhdXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVE
b21haW4pOworICAgIGF1dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlv
blNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25k
IHx8ICFhdHRyaWJ1dGlvbkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8mIHNvdXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVu
bGlua2FibGVUb2tlbigpOworICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKKyAgICAgICAgYXV0byBh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0
YSgpID8gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6
IC0xOworICAgICAgICBhdXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25Ucmln
Z2VyRGF0YSgpID8gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCku
cHJpb3JpdHkgOiAtMTsKKyAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBh
dHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJp
YnV0aW9uLnRpbWVzVG9TZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDogLTE7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25F
YXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlv
bkVhcmxpZXN0VGltZVRvU2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6
IC0xOworCisgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmli
dXRlZCBwcml2YXRlIGNsaWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdp
dGhvdXQgdmFsaWQgcmVwb3J0IHRpbWVzLgorICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RU
aW1lVG9TZW5kICE9IC0xICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsK
KworICAgICAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChp
bnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7CisgICAgICAgIGlm
ICghc3RhdGVtZW50CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJj
ZURhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJ
RCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0
LCBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0
YXRlbWVudC0+YmluZEludCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
dGF0ZW1lbnQtPmJpbmREb3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5r
YWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5
U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4
dCg5LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25h
dHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlv
bkVhcmxpZXN0VGltZVRvU2VuZCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlu
c2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50IGluc2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8g
c3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkpOworICAgIGlmICghc3RhdGVtZW50CisgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmF0dHJpYnV0aW9uRGVzdGlu
YXRpb25EYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+Ymlu
ZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDQsIGF0dHJpYnV0aW9uLnRpbWVPZkFkQ2xpY2soKS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDUsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2Fi
bGVUb2tlbi0+dG9rZW5CYXNlNjRVUkwgOiBlbXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg2LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBz
b3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDcsIHNvdXJjZVVu
bGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+a2V5SURCYXNlNjRVUkwgOiBl
bXB0eVN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVl
cnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1hcmtBbGxVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQoreworICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0VW5hdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNldFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJrQWxsVW5hdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nIl9zKTsKKwor
ICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQWxsVW5hdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQoUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQmIGF0dHJpYnV0aW9uKQoreworICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9t
YWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGlu
YXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21haW4pOworCisgICAgaWYgKCFzb3VyY2VTaXRlRG9t
YWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9yZW1v
dmVVbmF0dHJpYnV0ZWRTdGF0ZW1lbnQsIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5LCAicmVtb3Zl
VW5hdHRyaWJ1dGVkIl9zKTsKKworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8
IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlv
blNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVVbmF0
dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKworc3RkOjpvcHRpb25hbDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmli
dXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
dHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBTb3VyY2VTaXRlJiBzb3VyY2VT
aXRlLCBjb25zdCBBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYgZGVzdGluYXRpb25TaXRlLCBB
dHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkKK3sKKyAgICAv
LyBXZSBzaG91bGQgYWx3YXlzIGNsZWFyIGV4cGlyZWQgY2xpY2tzIGZyb20gdGhlIGRhdGFiYXNl
IGJlZm9yZSBzY2hlZHVsaW5nIGFuIGF0dHJpYnV0aW9uLgorICAgIGNsZWFyRXhwaXJlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KCk7CisKKyAgICBpZiAoIWF0dHJpYnV0aW9uVHJpZ2dlckRhdGEu
aXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAi
R290IGFuIGludmFsaWQgYXR0cmlidXRpb24uIik7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2Fz
dENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBN
ZXNzYWdlTGV2ZWw6OkVycm9yLCAiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRdIEdvdCBhbiBp
bnZhbGlkIGF0dHJpYnV0aW9uLiJfcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9CisKKyAgICBhdXRvIGRhdGEgPSBhdHRyaWJ1dGlvblRyaWdnZXJEYXRh
LmRhdGE7CisgICAgYXV0byBwcmlvcml0eSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEucHJpb3Jp
dHk7CisKKyAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgeworICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1YmxpY311IGFuZCBwcmlvcml0
eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7CisgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1l
c3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRd
IEdvdCBhbiBhdHRyaWJ1dGlvbiB3aXRoIGF0dHJpYnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywg
ZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlvcml0eSwgIicuIl9zKSk7CisgICAgfQor
CisgICAgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uU2Vjb25kc1VudGlsU2Vu
ZERhdGEgc2Vjb25kc1VudGlsU2VuZCB7IHN0ZDo6bnVsbG9wdCwgc3RkOjpudWxsb3B0IH07CisK
KyAgICBhdXRvIGF0dHJpYnV0aW9uID0gZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KHNvdXJj
ZVNpdGUsIGRlc3RpbmF0aW9uU2l0ZSk7CisgICAgYXV0byYgcHJldmlvdXNseVVuYXR0cmlidXRl
ZCA9IGF0dHJpYnV0aW9uLmZpcnN0OworICAgIGF1dG8mIHByZXZpb3VzbHlBdHRyaWJ1dGVkID0g
YXR0cmlidXRpb24uc2Vjb25kOworCisgICAgaWYgKHByZXZpb3VzbHlVbmF0dHJpYnV0ZWQpIHsK
KyAgICAgICAgLy8gQWx3YXlzIGNvbnZlcnQgdGhlIHBlbmRpbmcgYXR0cmlidXRpb24gYW5kIHJl
bW92ZSBpdCBmcm9tIHRoZSB1bmF0dHJpYnV0ZWQgbWFwLgorICAgICAgICByZW1vdmVVbmF0dHJp
YnV0ZWQoKnByZXZpb3VzbHlVbmF0dHJpYnV0ZWQpOworICAgICAgICBzZWNvbmRzVW50aWxTZW5k
ID0gcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0
VGltZVRvU2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKKworICAgICAgICAv
LyBXZSBzaG91bGQgYWx3YXlzIGhhdmUgYSB2YWxpZCBzZWNvbmRzVW50aWxTZW5kIHZhbHVlIGZv
ciBhIHByZXZpb3VzbHlVbmF0dHJpYnV0ZWQgdmFsdWUgYmVjYXVzZSB0aGVyZSBjYW4gYmUgbm8g
cHJldmlvdXMgYXR0cmlidXRpb24gd2l0aCBhIGhpZ2hlciBwcmlvcml0eS4KKyAgICAgICAgaWYg
KCFzZWNvbmRzVW50aWxTZW5kLmhhc1ZhbGlkU2Vjb25kc1VudGlsU2VuZFZhbHVlcygpKSB7Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5h
YmxlZCgpKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCwgIkNvbnZlcnRlZCBhIHN0b3JlZCBhZCBjbGljayB3aXRoIGF0dHJpYnV0aW9uIHRy
aWdnZXIgZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUuIiwgZGF0YSwg
cHJpb3JpdHkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZvLCBt
YWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gQ29udmVydGVkIGEgc3RvcmVk
IGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBh
bmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIGF0dHJpYnV0aW9uLCBvciB0aGUgbmV3IGF0
dHJpYnV0aW9uIGhhcyBoaWdoZXIgcHJpb3JpdHksIGluc2VydC91cGRhdGUgdGhlIGRhdGFiYXNl
LgorICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkIHx8IHByZXZpb3VzbHlVbmF0dHJp
YnV0ZWQudmFsdWUoKS5oYXNIaWdoZXJQcmlvcml0eVRoYW4oKnByZXZpb3VzbHlBdHRyaWJ1dGVk
KSkgeworICAgICAgICAgICAgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZSgq
cHJldmlvdXNseVVuYXR0cmlidXRlZCksIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRp
b25UeXBlOjpBdHRyaWJ1dGVkKTsKKworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9k
ZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVD
bGlja01lYXN1cmVtZW50LCAiUmVwbGFjZWQgYSBwcmV2aW91c2x5IGNvbnZlcnRlZCBhZCBjbGlj
ayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0aW9uIGRhdGE6ICV7cHVibGljfXUgYW5kIHBy
aW9yaXR5OiAle3B1YmxpY311IGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iLCBkYXRh
LCBwcmlvcml0eSk7CisgICAgICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gUmVwbGFjZWQgYSBw
cmV2aW91c2x5IGNvbnZlcnRlZCBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0
aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlv
cml0eSwgIicgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiJfcykpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwcmV2aW91c2x5QXR0cmlidXRlZCkgewor
ICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIG5ldyBhdHRyaWJ1dGlvbiwgcmUtYXR0cmlidXRlIHRo
ZSBvbGQgb25lIHRvIHJlc3BlY3QgdGhlIG5ldyBwcmlvcml0eSwgYnV0IG9ubHkgaWYgdGhpcyBy
ZXBvcnQgaGFzCisgICAgICAgIC8vIG5vdCBiZWVuIHNlbnQgdG8gdGhlIHNvdXJjZSBvciBkZXN0
aW5hdGlvbiBzaXRlIHlldC4KKyAgICAgICAgaWYgKCFwcmV2aW91c2x5QXR0cmlidXRlZC52YWx1
ZSgpLmhhc1ByZXZpb3VzbHlCZWVuUmVwb3J0ZWQoKSkgeworICAgICAgICAgICAgYXV0byBzZWNv
bmRzVW50aWxTZW5kID0gcHJldmlvdXNseUF0dHJpYnV0ZWQudmFsdWUoKS5hdHRyaWJ1dGVBbmRH
ZXRFYXJsaWVzdFRpbWVUb1NlbmQoV1RGTW92ZShhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKSk7Cisg
ICAgICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNlbmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5k
VmFsdWVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgICAg
ICAgICAgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV1RGTW92ZSgqcHJldmlvdXNseUF0
dHJpYnV0ZWQpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCk7CisKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCwgIlJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0
aW9uIHRyaWdnZXIgZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUgYmVj
YXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZS1jb252ZXJ0ZWQgYW4gYWQgY2xpY2sgd2l0aCBhIG5l
dyBvbmUgd2l0aCBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBw
cmlvcml0eTogJyJfcywgcHJpb3JpdHksICInJyBiZWNhdXNlIGl0IGhhZCBoaWdoZXIgcHJpb3Jp
dHkuIl9zKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNl
Y29uZHNVbnRpbFNlbmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpCisgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gc2Vjb25kc1VudGlsU2VuZDsKK30K
KworVmVjdG9yPFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50PiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCit7
CisgICAgYXV0byBhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBhbGxB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgInByaXZhdGVDbGlja01lYXN1
cmVtZW50VG9TdHJpbmciX3MpOworCisgICAgaWYgKCFhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKKyAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOworCisgICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3Rk
OjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluKQoreworICAgIC8vIERlZmF1bHQg
dG8gY2xlYXIgYWxsIGVudHJpZXMgaWYgbm8gZG9tYWluIGlzIHNwZWNpZmllZC4KKyAgICBTdHJp
bmcgYmluZFBhcmFtZXRlciA9ICIlIjsKKyAgICBpZiAoZG9tYWluKSB7CisgICAgICAgIGF1dG8g
ZG9tYWluSURUb01hdGNoID0gZG9tYWluSUQoKmRvbWFpbik7CisgICAgICAgIGlmICghZG9tYWlu
SURUb01hdGNoKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJpbmRQYXJhbWV0ZXIg
PSBTdHJpbmc6Om51bWJlcigqZG9tYWluSURUb01hdGNoKTsKKyAgICB9CisKKyAgICBhdXRvIHRy
YW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1
dG8gY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1l
bnQobV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBj
bGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zKTsKKworICAgIGlmICghY2xlYXJVbmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVh
clVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgYmluZFBhcmFtZXRlcikg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9S
KG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAg
IGF1dG8gY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGNs
ZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhclByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zKTsKKworICAgIGlmICghY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50CisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRl
eHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyQXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMiwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQo
KQoreworICAgIGF1dG8gZXhwaXJhdGlvblRpbWVGcmFtZSA9IFdhbGxUaW1lOjpub3coKSAtIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjptYXhBZ2UoKTsKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyRXhwaXJlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFF1ZXJ5LCAiY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOworCisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKDEsIGV4cGlyYXRpb25UaW1lRnJhbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRXhwaXJlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmF0dHJp
YnV0aW9uVG9TdHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKK3sKKyAg
ICBhdXRvIHNvdXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0g
Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAg
ICBhdXRvIHNvdXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3Vy
Y2VTaXRlRG9tYWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9t
YWluLCAiXG5Tb3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKKworICAgIGlmIChhdHRyaWJ1dGlvblR5
cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQp
IHsKKyAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1
bW5JbnQoMyk7CisgICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KTsKKyAgICAgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbklu
dCg2KTsKKworICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgeworICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3Jp
dHksICJcbkF0dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7CisgICAgICAgICAg
ICBpZiAoZWFybGllc3RUaW1lVG9TZW5kID09IC0xKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJOb3Qgc2V0Iik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHNlY29uZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RU
aW1lVG9TZW5kKSAtIFdhbGxUaW1lOjpub3coKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgoc2Vjb25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhf
aCkgPyAiV2l0aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxu
Tm8gYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhLiIpOworICAgIH0gZWxzZQorICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7CisgICAgYnVpbGRl
ci5hcHBlbmQoJ1xuJyk7CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitT
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dFRvU3RyaW5nKCkKK3sKKyAgICBhdXRvIHByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIChTRUxFQ1QgQ09VTlQoKikg
RlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250MSwgKFNFTEVD
VCBDT1VOVCgqKSBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkgYXMgY250
MiJfcyk7CisgICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMgfHwgcHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0
cy0+Y29sdW1uSW50KDApICYmICFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPmNv
bHVtbkludCgxKSkKKyAgICAgICAgcmV0dXJuICJcbk5vIHN0b3JlZCBQcml2YXRlIENsaWNrIE1l
YXN1cmVtZW50IGRhdGEuXG4iX3M7CisKKyAgICBhdXRvIHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXR0cmlidXRpb25zU3RhdGVtZW50LCBhbGxVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1F1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRUb1N0cmluZyJfcyk7CisKKyAgICBpZiAoIXVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZywg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgY29uc3QgY2hhciogcHJlZml4ID0gdW5hdHRyaWJ1dGVk
TnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRzOiI7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbicsCisgICAgICAgICAgICBh
dHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0cmlidXRlZCkpOworICAg
IH0KKworICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwg
YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKKworICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0
cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgYXR0cmlidXRlZE51bWJlciA9IDA7CisgICAgd2hpbGUgKGF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGlm
ICghYXR0cmlidXRlZE51bWJlcikKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHVuYXR0cmli
dXRlZE51bWJlciA/ICJcbiIgOiAiIiwgIkF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJl
bWVudHM6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbldlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50ICIsICsrYXR0cmlidXRlZE51bWJlciArIHVuYXR0cmlidXRlZE51bWJlciwg
J1xuJywKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uVG9TdHJpbmcoYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0
dHJpYnV0ZWQpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwor
c3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3RkOjpv
cHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCYgYXR0cmlidXRpb24pCit7CisgICAgYXV0byBzb3VyY2VTaXRlRG9tYWlu
SUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4p
OworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlv
bi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJj
ZVNpdGVEb21haW5JRCB8fCAhZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCisgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBhdXRv
IHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2VhcmxpZXN0VGltZXNU
b1NlbmRTdGF0ZW1lbnQsIGVhcmxpZXN0VGltZXNUb1NlbmRRdWVyeSwgImVhcmxpZXN0VGltZXNU
b1NlbmQiX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8
U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRp
bWVUb1NlbmRUb0Rlc3RpbmF0aW9uOworICAgIAorICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGlj
YXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRl
LgorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKKyAgICAg
ICAgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgwKTsKKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkg
PiAwLjApCisgICAgICAgIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgxKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGlu
YXRpb24pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9y
dEFzU2VudFRvU291cmNlKFNvdXJjZURvbWFpbklEIHNvdXJjZVNpdGVEb21haW5JRCwgRGVzdGlu
YXRpb25Eb21haW5JRCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCkKK3sKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX21hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZVN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvU291cmNlUXVlcnksICJtYXJrUmVwb3J0
QXNTZW50VG9Tb3VyY2UiX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCBkZXN0aW5hdGlv
blNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb1NvdXJj
ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9uRG9tYWlu
SUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQg
PSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5hdGlvblN0
YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtSZXBvcnRB
c1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKKworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWluSUQpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclNlbnRBdHRyaWJ1
dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCBhdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50KQoreworICAgIGF1dG8gdGltZXNUb1NlbmQgPSBlYXJsaWVzdFRpbWVz
VG9TZW5kKGF0dHJpYnV0aW9uKTsKKyAgICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9
IHRpbWVzVG9TZW5kLmZpcnN0OworICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSB0aW1lc1RvU2VuZC5zZWNvbmQ7CisKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7Cisg
ICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLmRl
c3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKworICAgIGlmICghc291cmNlU2l0
ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChhdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSB7CisgICAgY2FzZSBQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6U291cmNlOgor
ICAgICAgICBpZiAoIXNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCkgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgbWFya1JlcG9ydEFzU2VudFRvU291cmNlKCpzb3VyY2VTaXRlRG9tYWluSUQsICpkZXN0aW5h
dGlvblNpdGVEb21haW5JRCk7CisgICAgICAgIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IHN0
ZDo6bnVsbG9wdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludDo6RGVzdGluYXRpb246CisgICAgICAgIGlm
ICghZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1h
cmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uKCpzb3VyY2VTaXRlRG9tYWluSUQsICpkZXN0aW5h
dGlvblNpdGVEb21haW5JRCk7CisgICAgICAgIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5k
ID0gc3RkOjpudWxsb3B0OworICAgIH0KKworICAgIC8vIERvbid0IGNsZWFyIHRoZSBhdHRyaWJ1
dGUgZnJvbSB0aGUgZGF0YWJhc2UgdW5sZXNzIGl0IGhhcyBiZWVuIHJlcG9ydGVkIGJvdGggdG8g
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gc2l0ZS4KKyAgICBpZiAoZGVzdGluYXRpb25FYXJs
aWVzdFRpbWVUb1NlbmQgfHwgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEID0gPyJfcyk7CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQKKyAgICAgICAg
fHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgY2xlYXJBdHRyaWJ1dGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uIGZhaWxlZCB0byBzdGVwLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcoKQoreworICAgIGF1dG8gZXhwaXJl
ZFRpbWVUb1NlbmQgPSBXYWxsVGltZTo6bm93KCkgLSAxX2g7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gZWFy
bGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlID0gPyJfcyk7CisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1Nl
bmRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJV
UERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVU
b1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCJfcyk7CisKKyAgICBpZiAoIWVhcmxpZXN0VGltZVRv
U2VuZFRvU291cmNlU3RhdGVtZW50CisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291
cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVk
Rm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgaWYgKCFlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uU3RhdGVt
ZW50IHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9u
SUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0F0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1Njb3BlRXhpdDxGdW5j
dGlvbjx2b2lkKCk+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmJlZ2luVHJhbnNhY3Rp
b25JZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9ncmVzcygpKQor
ICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsgW10geyB9IH0p
OworCisgICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOworICAgIHJldHVybiBtYWtlU2NvcGVFeGl0
KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10geworICAgICAgICBtX3RyYW5zYWN0aW9uLmNvbW1p
dCgpOworICAgIH0gfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCisjdW5kZWYgSVRQ
X1JFTEVBU0VfTE9HCisjdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IDI0MjJmYzg0ZjU0ZWU3
Y2QzMGVlNDBmMTQyMDQyZDQxZWJmNTFiM2YuLmQ3ZjViMGFhMGZkNDUyYjUyYmU0NjQyN2NmY2Y5
ZTNmMzkwMTE4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIy
ICsyNywyNSBAQAogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAotI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiT3Bl
cmF0aW5nRGF0ZS5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBlcy5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWVJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlVHJhbnNhY3Rpb24uaD4KKyNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVk
ZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNp
bmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKICNpZiBIQVZFKENPUkVf
UFJFRElDVElPTikKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNv
Y29hLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgS2V5ZWREZWNvZGVy
OwotY2xhc3MgS2V5ZWRFbmNvZGVyOworY2xhc3MgU1FMaXRlRGF0YWJhc2U7CitjbGFzcyBTUUxp
dGVTdGF0ZW1lbnQ7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biA6IGJv
b2w7CiBlbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9vbDsKIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwpAQCAtNTAsMTkwICs1MywxNTIgQEAgc3RydWN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3M7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBPcGVyYXRp
bmdEYXRlIHsKLXB1YmxpYzoKLSAgICBPcGVyYXRpbmdEYXRlKCkgPSBkZWZhdWx0OwotICAgIAot
ICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxsVGltZSk7Ci0gICAgc3Rh
dGljIE9wZXJhdGluZ0RhdGUgdG9kYXkoKTsKLSAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2No
KCkgY29uc3Q7Ci0gICAgaW50IHllYXIoKSBjb25zdCB7IHJldHVybiBtX3llYXI7IH0KLSAgICBp
bnQgbW9udGgoKSBjb25zdCB7IHJldHVybiBtX21vbnRoOyB9Ci0gICAgaW50IG1vbnRoRGF5KCkg
Y29uc3QgeyByZXR1cm4gbV9tb250aERheTsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBP
cGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7Ci0gICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9w
ZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdDsKLSAgICAKLSAgICBPcGVyYXRpbmdEYXRlKGludCB5
ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKLSAgICAgICAgOiBtX3llYXIoeWVhcikKLSAg
ICAgICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCi0g
ICAgeyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1feWVhciB7IDAgfTsKLSAgICBpbnQgbV9tb250
aCB7IDAgfTsgLy8gWzAsIDExXS4KLSAgICBpbnQgbV9tb250aERheSB7IDAgfTsgLy8gWzEsIDMx
XS4KLX07Ci0KLWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgeyAz
MCB9OwotY29uc3RleHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgeyA3IH07
Ci1jb25zdGV4cHIgU2Vjb25kcyBvcGVyYXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZyB7
IDFfaCB9OwotCi1lbnVtIGNsYXNzIE9wZXJhdGluZ0RhdGVzV2luZG93IDogdWludDhfdCB7IExv
bmcsIFNob3J0LCBGb3JMaXZlT25UZXN0aW5nLCBGb3JSZXByb1Rlc3RpbmcgfTsKK2NsYXNzIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjsKIGVudW0gY2xhc3MgQ29va2llQWNjZXNzIDog
dWludDhfdCB7IENhbm5vdFJlcXVlc3QsIEJhc2VkT25Db29raWVQb2xpY3ksIE9ubHlJZkdyYW50
ZWQgfTsKIAorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlz
dGljID0gNTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RhdGlzdGljcyA9IDc7
CitzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dW5zaWduZWQsIG51bWJlck9mQnVja2V0c1Bl
clN0YXRpc3RpYz4gYnVja2V0U2l6ZXMge3sgMSwgMywgMTAsIDUwLCAxMDAgfX07Citjb25zdGV4
cHIgU2Vjb25kcyBtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCB7IDVfcyB9Owor
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRp
cmVjdFRyYWNlQmFjayB7IDUwIH07CisKKy8vIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCit1
c2luZyBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgPSBXZWJDb3JlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDsKK3VzaW5nIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Cit1c2luZyBTb3VyY2VTaXRl
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNpdGU7Cit1c2luZyBB
dHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZTsKK3VzaW5nIEF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEgPSBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25Ucmln
Z2VyRGF0YTsKK3VzaW5nIFNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IGRvdWJsZTsKK3VzaW5n
IERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwordXNpbmcgU291cmNlRG9t
YWluSUQgPSB1bnNpZ25lZDsKK3VzaW5nIERlc3RpbmF0aW9uRG9tYWluSUQgPSB1bnNpZ25lZDsK
KwordXNpbmcgRXhpc3RpbmdDb2x1bW5zID0gVmVjdG9yPFN0cmluZz47Cit1c2luZyBFeHBlY3Rl
ZENvbHVtbnMgPSBWZWN0b3I8U3RyaW5nPjsKK3VzaW5nIEV4aXN0aW5nQ29sdW1uTmFtZSA9IFN0
cmluZzsKK3VzaW5nIEV4cGVjdGVkQ29sdW1uTmFtZSA9IFN0cmluZzsKK3VzaW5nIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwordXNpbmcg
UmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFRv
cEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBTdWJGcmFt
ZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgU3ViUmVzb3VyY2VE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFJlZGlyZWN0RG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBSZWRpcmVjdGVkRnJvbURvbWFp
biA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgUmVkaXJlY3RlZFRvRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBOYXZpZ2F0ZWRGcm9tRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Cit1c2luZyBPcGVuZXJEb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKwordHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5n
LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+IFRhYmxlQW5kSW5kZXhQYWlyOworCiAvLyBUaGlzIGlz
IGFsd2F5cyBjb25zdHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCiBjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3M7Ci0gICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKLSAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwotICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47Ci0gICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9tYWluID0gV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgTmF2aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgT3BlbmVyRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgCi0gICAgdmlydHVhbCB+UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFN1c3BlbmRhYmxlV29ya1F1ZXVl
JiwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5
UGF0aCwgUEFMOjpTZXNzaW9uSUQpOworICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFs
IFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBh
Z2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEoKSBjb25zdCA9IDA7CisgICAgc3RhdGljIEhhc2hTZXQ8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4mIGFsbFN0b3JlcygpOwogCi0gICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikg
PSAwOwotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluc1RvQmxvY2tDb29raWVzRm9yJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKLSAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKyAgICB2b2lkIGludGVycnVwdCgpOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OworICAg
IHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICB2b2lkIHJ1bkluY3JlbWVudGFs
VmFjdXVtQ29tbWFuZCgpOworICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7
CiAKLSAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICBzdGQ6
Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgp
OwogCi0gICAgdmlydHVhbCB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+JiYpID0gMDsKKyAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VM
b2FkU3RhdGlzdGljcz4mJik7CisgICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKTsKKyAgICB2b2lkIHJlc291
cmNlVG9TdHJpbmcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzJiYsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9wZW5lcklELCBPcGVu
ZXJEb21haW4mJikgPSAwOwotICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBhZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEoKSBjb25z
dDsKKyAgICAKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29u
c3QgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3ImLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogCisgICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQgc2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIHNldFZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgc2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZh
bHVlKTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
IGNvbnN0OworICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYpOwogICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNp
dGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjYW5jZWxQZW5k
aW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9E
b21haW4mKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJp
bmcmKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZv
ckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JikgPSAwOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOwor
ICAgIHZvaWQgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbChjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOworICAgIHZvaWQgc2V0TGFzdFNlZW4oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKTsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOworICAgIHZvaWQgc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgUmVkaXJlY3REb21haW4mKTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsK
KyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7CisgICAgYm9vbCBpc1JlZ2lz
dGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNv
bnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29u
c3Q7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFp
biYpOworICAgIHZvaWQgY2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICAKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2Vi
Q29yZTo6RnJhbWVJZGVudGlmaWVyPiwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
U3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3Bl
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKKyAgICB2
b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzJiYsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG9wZW5lcklELCBPcGVuZXJEb21haW4m
Jik7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJh
bWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQYWdlSWRlbnRp
ZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBXZWJDb3JlOjpTdG9y
YWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6U3RvcmFnZUFj
Y2Vzc1dhc0dyYW50ZWQpPiYmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhj
b25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBj
b25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYpID0gMDsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRU
b0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFp
biYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVy
TWFpbkZyYW1lRG9jdW1lbnRMb2FkLCBib29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2Vy
KTsKKyAgICB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29uc3QgTmF2
aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJik7CisgICAgdm9pZCBs
b2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIGJvb2wgaGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cpOwogCisgICAgdm9pZCBzZXRJc1J1bm5pbmdUZXN0KGJvb2wpOwogICAgIHZvaWQg
bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOwotCi0gICAgdm9pZCBzZXRNYXhTdGF0aXN0
aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwotICAgIHZvaWQgc2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CiAgICAgdm9pZCByZXNldFBhcmFtZXRl
cnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICBib29sIHNob3VsZFNraXAoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdE
YXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50KTsKKyAgICBib29sIGlzQ29y
cmVjdFN1YlN0YXRpc3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJik7CiAKICAgICB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJc1J1bm5pbmdUZXN0KGJvb2wpOwotICAg
IGJvb2wgc2hvdWxkU2tpcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwogICAgIHZv
aWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7Ci0gICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAg
IHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIHZvaWQgY2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICB2b2lkIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1v
dmVkKGJvb2wpOworICAgIGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKKyAg
ICBib29sIHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgY29uc3Q7CiAgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vj
b25kcyk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wp
OwotICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01v
ZGVFbmFibGVkOyB9OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNldFRoaXJkUGFydHlDb29raWVC
bG9ja2luZ01vZGUoV2ViQ29yZTo6VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSBtb2RlKSB7
IG1fdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSA9IG1vZGU7IH07Ci0gICAgV2ViQ29yZTo6
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV90aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOyB9OwotICAg
IHZvaWQgc2V0U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQoV2ViQ29yZTo6U2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgZW5hYmxlZCkgeyBtX3NhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnRFbmFibGVkID0gZW5hYmxlZDsgfTsKLSAgICBib29sIGlzU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3NhbWVTaXRlU3RyaWN0RW5mb3Jj
ZW1lbnRFbmFibGVkID09IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVk
OjpZZXM7IH07Ci0gICAgdm9pZCBzZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShX
ZWJDb3JlOjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBtb2RlKSB7IG1fZmlyc3RQ
YXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBtb2RlOyB9Ci0gICAgdm9pZCBzZXRTdGFuZGFs
b25lQXBwbGljYXRpb25Eb21haW4oUmVnaXN0cmFibGVEb21haW4mJiBkb21haW4pIHsgbV9zdGFu
ZGFsb25lQXBwbGljYXRpb25Eb21haW4gPSBXVEZNb3ZlKGRvbWFpbik7IH0KLSNpZiBFTkFCTEUo
QVBQX0JPVU5EX0RPTUFJTlMpCi0gICAgdm9pZCBzZXRBcHBCb3VuZERvbWFpbnMoSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4mJik7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIGJvb2wgYXJlQWxsVGhp
cmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyPiwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJh
bWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBX
ZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURv
bWFpbiYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
V2FzR3JhbnRlZCk+JiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBsb2dGcmFtZU5hdmlnYXRp
b24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0
IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUs
IFNlY29uZHMgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRp
YWxseUluaXRpYXRlZEJ5VXNlcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2dVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlv
bihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
T3BlcmF0aW5nRGF0ZXNXaW5kb3cpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2Vl
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKSA9IDA7CiAKLSAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxs
RG9tYWlucygpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKLQotICAgIGNvbnN0IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JlOyB9Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heEltcG9ydGFuY2UgeyAzIH07CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBhbGxE
b21haW5zKCkgY29uc3Q7CisgICAgYm9vbCBkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50KTsK
KyAgICB2b2lkIHJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsK
KyAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvclNwZWNpZmljRG9tYWluKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNNZW1v
cnlTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzRGF0
YWJhc2VTdG9yZSgpY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldFBydW5lRW50
cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCk7CisgICAgdm9pZCBzZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOworICAgIHZvaWQgdXBkYXRl
Q2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNp
ZGVDb29raWVzKFNlY29uZHMpOworICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyk7
CisgICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworICAgIHZvaWQgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lkIHNldEFwcEJvdW5kRG9tYWlucyhI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKIAotICAgIHZpcnR1YWwgdm9pZCBpbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJPcGVyYXRpbmdEYXRlcygpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzU3RhdGlzdGlj
c0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGlu
Z0RhdGVzV2luZG93KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydEV4cGlyZWRT
dGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVt
YmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sKSA9IDA7Ci0gICAgCiAg
ICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQm
JiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgbWFya0FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBp
cmVkRm9yVGVzdGluZygpID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uU2Vjb25kc1VudGlsU2VuZERhdGE+
IGF0dHJpYnV0ZVByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiwgY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRlJiwgV2ViQ29yZTo6UHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEmJikgPSAwOwotICAgIHZp
cnR1YWwgVmVjdG9yPFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50PiBhbGxBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3RkOjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4p
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0
cmluZygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5n
KCkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRh
bmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLQotICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBT
dXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNob3VsZEluY2x1ZGVMb2NhbGhvc3QpOwotICAgIAotICAg
IGJvb2wgZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkOyB9Ci0KLSAgICB2b2lkIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0
cmljdEZvclNwZWNpZmljRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291
cmNlc0ZvckRlYnVnTW9kZSgpID0gMDsKLSAgICB2aXJ0dWFsIFJlZ2lzdHJhYmxlRG9tYWluc1Rv
RGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIHJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRl
T3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwcnVuZVN0
YXRpc3RpY3NJZk5lZWRlZCgpID0gMDsKLQotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSYgc3RvcmUoKSB7IHJldHVybiBtX3N0b3JlOyB9Ci0gICAgUmVmPFN1c3BlbmRhYmxlV29y
a1F1ZXVlPiYgd29ya1F1ZXVlKCkgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KLSNpZiBIQVZFKENP
UkVfUFJFRElDVElPTikKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29h
JiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
cjsgfQotI2Vsc2UKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllciYgY2xhc3Np
ZmllcigpIHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7IH0KLSNl
bmRpZgorICAgIHZvaWQgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlv
blR5cGUpOworICAgIHZvaWQgbWFya0FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXNFeHBpcmVkRm9yVGVzdGluZygpOworICAgIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uU2Vjb25kc1VudGlsU2VuZERhdGE+IGF0
dHJpYnV0ZVByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiwgY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGluYXRpb25TaXRlJiwgV2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEmJik7CisgICAgVmVjdG9yPFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50PiBhbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQoKTsKKyAgICB2b2lkIGNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc3Rk
OjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4pOworICAgIHZvaWQgY2xlYXJFeHBpcmVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQoKTsKKyAgICBTdHJpbmcgcHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRUb1N0cmluZygpOworICAgIHZvaWQgY2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQmJiwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6
OkF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpOworICAgIHZvaWQgbWFya0F0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nKCk7CisgICAgVmVjdG9yPFN0
cmluZz4gY29sdW1uc0ZvclRhYmxlKGNvbnN0IFN0cmluZyYpOwogCiAgICAgc3RydWN0IFBhcmFt
ZXRlcnMgewogICAgICAgICBzaXplX3QgcHJ1bmVFbnRyaWVzRG93blRvIHsgODAwIH07CkBAIC0y
NDksNiArMjE0LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgc2l6ZV90IG1pbmltdW1Ub3BGcmFt
ZVJlZGlyZWN0c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgeyAxMCB9OwogICAgICAgICBi
b29sIGlzUnVubmluZ1Rlc3QgeyBmYWxzZSB9OwogICAgIH07CisgICAgCisgICAgV2ViQ29yZTo6
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSB0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV90aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOyB9OworICAg
IHZvaWQgc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlIG1vZGUpIHsgbV90aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2Rl
ID0gbW9kZTsgfTsKKyAgICB2b2lkIHNldFNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVk
KFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkIGVuYWJsZWQpIHsgbV9z
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9IGVuYWJsZWQ7IH07CisgICAgYm9vbCBp
c1NhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zYW1l
U2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCA9PSBXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZDo6WWVzOyB9OworICAgIHZvaWQgc2V0Rmlyc3RQYXJ0eVdlYnNpdGVE
YXRhUmVtb3ZhbE1vZGUoV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUg
bW9kZSkgeyBtX2ZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlID0gbW9kZTsgfQorICAg
IHZvaWQgc2V0U3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluJiYg
ZG9tYWluKSB7IG1fc3RhbmRhbG9uZUFwcGxpY2F0aW9uRG9tYWluID0gV1RGTW92ZShkb21haW4p
OyB9CisgICAgYm9vbCBkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQ7IH0KICAgICBjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAgICAgV2FsbFRpbWUmIGVuZE9m
R3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSB7IHJldHVybiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdU
aW1lc3RhbXA7IH0KICAgICBjb25zdCBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQpA
QCAtMjYxLDIxICsyMzQsMTM1IEBAIHByb3RlY3RlZDoKICAgICBib29sIGRlYnVnTG9nZ2luZ0Vu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQ7IH07CiAgICAgYm9v
bCBkZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9
CiAgICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgZmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOyB9Ci0gICAgYm9vbCBzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURh
dGFEZWxldGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRy
YWNlQmFjayB7IDUwIH07Ci0gICAgCi0gICAgVmVjdG9yPENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4+IG1fZGF0YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnM7CisgICAgYm9vbCBpc05l
d1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUoKSBjb25zdCB7IHJldHVybiBtX2lz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZTsgfQorICAgIHZvaWQgc2V0SXNO
ZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGJvb2wgaXNOZXdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKSB7IG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VGaWxlID0gaXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlOyB9
CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Owot
ICAgIHZvaWQgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdM
b2dnaW5nRW5hYmxlZCAgPSBlbmFibGVkOyB9Ci0gICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZChib29sKTsKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBvcGVuSVRQRGF0YWJh
c2UoKTsKKyAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOworICAgIGJv
b2wgY3JlYXRlVW5pcXVlSW5kaWNlcygpOworICAgIGJvb2wgY3JlYXRlU2NoZW1hKCk7CisgICAg
dm9pZCBhZGRNaXNzaW5nVGFibGVzSWZOZWNlc3NhcnkoKTsKKyAgICBib29sIG1pc3NpbmdVbmlx
dWVJbmRpY2VzKCk7CisgICAgYm9vbCBuZWVkc1VwZGF0ZWRTY2hlbWEoKTsKKyAgICBib29sIG5l
ZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hKCk7CisgICAgdm9pZCByZW5h
bWVDb2x1bW5JblRhYmxlKFN0cmluZyYmLCBFeGlzdGluZ0NvbHVtbk5hbWUmJiwgRXhwZWN0ZWRD
b2x1bW5OYW1lJiYpOworICAgIHZvaWQgYWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKFN0cmluZyYm
LCBjb25zdCBFeGlzdGluZ0NvbHVtbnMmLCBjb25zdCBFeHBlY3RlZENvbHVtbnMmKTsKKyAgICB2
b2lkIGFkZE1pc3NpbmdDb2x1bW5zSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHJlbmFtZUNvbHVt
bnNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcmVuYW1lQ29sdW1uSW5UYWJsZSgpOworICAgIFRh
YmxlQW5kSW5kZXhQYWlyIGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIHVwZGF0ZVByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hSWZOZWNlc3Nh
cnkoKTsKKyAgICB2b2lkIGVuYWJsZUZvcmVpZ25LZXlzKCk7CisgICAgYm9vbCBtaXNzaW5nUmVm
ZXJlbmNlVG9PYnNlcnZlZERvbWFpbnMoKTsKKyAgICB2b2lkIG1pZ3JhdGVEYXRhVG9OZXdUYWJs
ZXNJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7CisKKyAg
ICB2b2lkIGRlc3Ryb3lTdGF0ZW1lbnRzKCk7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
QXV0b1Jlc2V0U2NvcGUgc2NvcGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+JiwgQVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKKwor
ICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1
YkZyYW1lRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5h
bChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9wdGlvbmFsPFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpOworICAgIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBoYXNVc2VyR3Jh
bnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpOworICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9j
a2VkVW5kZXIoY29uc3QgVG9wRnJhbWVEb21haW4mKTsKKyAgICBDb29raWVBY2Nlc3MgY29va2ll
QWNjZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsK
KworICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5PiBnZXRUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmly
c3RQYXJ0eURvbWFpbnModW5zaWduZWQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7
CisgICAgU2Vjb25kcyBnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdDsKKworICAgIHZvaWQg
bWVyZ2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQg
bWVyZ2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpOworICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2b2lkIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmLCBjb25zdCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPiYsIHVuc2lnbmVkKTsKKyAgICBTdHJpbmcgZW5zdXJlQW5kTWFrZURv
bWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKTsKKyAgICBib29sIHJl
bGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYs
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0OworCisgICAgU3RyaW5nIGdldERvbWFpblN0cmlu
Z0Zyb21Eb21haW5JRCh1bnNpZ25lZCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICBib29sIGRv
bWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworCisgICAgdm9pZCB1
cGRhdGVMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFdhbGxUaW1lKTsKKyAgICB2
b2lkIHVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGlu
dCk7CisKKyAgICBzdHJ1Y3QgRG9tYWluRGF0YSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklE
OworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbjsKKyAgICAgICAg
V2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7CisgICAgICAgIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uOworICAgICAgICBib29sIGdyYW5kZmF0aGVyZWQ7CisgICAgICAgIGJv
b2wgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKKyAgICAgICAgdW5zaWdu
ZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dDsKKyAgICB9OworCisgICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uLCBXYWxsVGltZSk7CisgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9tYWluRGF0YSYsIE9wZXJhdGluZ0RhdGVzV2lu
ZG93KTsKKyAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZShjb25zdCBEb21haW5EYXRhJik7CisgICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJl
ZChXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNX
aW5kb3cpIGNvbnN0OworCisgICAgdm9pZCBjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNp
Z25lZD4mJik7CisgICAgdm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlu
cyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKTsKICAgICB2b2lkIHJlbW92ZURhdGFSZWNv
cmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBzZXRDYWNoZU1heEFn
ZUNhcChTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdm9p
ZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0
ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNvbnN0OworICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpIGNv
bnN0OworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb25Bc0ZpcnN0UGFydHkoKSBjb25zdDsKKyAgICBIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBT
dWJSZXNvdXJjZURvbWFpbj4gZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lm
TmVlZGVkKCk7CisgICAgYm9vbCBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29u
c3Q7CisKKyAgICBlbnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8sIFllcyB9OworICAgIHN0ZDo6
cGFpcjxBZGRlZFJlY29yZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4+IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
V0FSTl9VTlVTRURfUkVUVVJOOworCisgICAgc3RydWN0IE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMgeworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFpbjsKKyAgICAg
ICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1bnNpZ25lZCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWduZWQgc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgfTsKKworICAgIEhhc2hNYXA8dW5zaWduZWQsIE5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7
CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZWx5RmluZE5v
blByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmlt
YXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291
cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisgICAgdm9pZCBzZXREb21h
aW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmKTsKKyAgICB2b2lkIG1hcmtBc1ByZXZh
bGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKworICAgIGJv
b2wgc2hvdWxkUmVtb3ZlQWxsV2Vic2l0ZURhdGFGb3IoY29uc3QgRG9tYWluRGF0YSYsIGJvb2wg
c2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyk7CisgICAgYm9vbCBzaG91bGRSZW1vdmVBbGxC
dXRDb29raWVzRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRm
YXRoZXJpbmcpOworICAgIGJvb2wgc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKERvbWFp
bkRhdGEmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpOworICAgIFJlZ2lzdHJh
YmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIHJlZ2lzdHJhYmxlRG9t
YWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yKCk7CisKKyAgICBBU0NJSUxpdGVy
YWwgZ2V0U3ViU3RhdGlzdGljU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZv
aWQgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluKSBjb25zdDsKKworICAgIHZvaWQgY2xlYXJP
cGVyYXRpbmdEYXRlcygpICB7IH0KKyAgICB2b2lkIHVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1l
dGVycygpOworCisgICAgU2NvcGVFeGl0PEZ1bmN0aW9uPHZvaWQoKT4+IFdBUk5fVU5VU0VEX1JF
VFVSTiBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSB7IHJldHVybiBtX3N0b3JlOyB9CisjaWYgSEFWRShD
T1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2Nv
YSYgY2xhc3NpZmllcigpIHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXI7IH0KKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXImIGNsYXNz
aWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9Cisj
ZW5kaWYKKyAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+JiB3b3JrUXVldWUoKSB7IHJldHVy
biBtX3dvcmtRdWV1ZTsgfQorCisgICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KKyAg
ICB2b2lkIHJlbW92ZVVuYXR0cmlidXRlZChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dCYpOworICAgIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50IGJ1aWxkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRGcm9tRGF0YWJhc2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpOworICAgIFN0cmluZyBhdHRyaWJ1
dGlvblRvU3RyaW5nKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlKTsKKyAgICBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxVbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4sIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50Pj4gZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNv
bnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiwgY29uc3Qg
V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGluYXRpb25T
aXRlJik7CisgICAgdm9pZCBtYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5hdGlvbihTb3VyY2VEb21h
aW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCk7CisgICAgdm9pZCBtYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoU291cmNlRG9tYWluSUQsIERlc3RpbmF0aW9uRG9tYWluSUQpOworICAgIHN0ZDo6cGFp
cjxzdGQ6Om9wdGlvbmFsPFNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZD4sIHN0ZDo6b3B0aW9uYWw8
RGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQ+PiBlYXJsaWVzdFRpbWVzVG9TZW5kKGNvbnN0
IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50Jik7CiAKICAgICBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CiAgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVl
PiBtX3dvcmtRdWV1ZTsKQEAgLTMwMyw2ICszOTAsNzQgQEAgcHJpdmF0ZToKICAgICBXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBtX2ZpcnN0UGFydHlXZWJzaXRlRGF0
YVJlbW92YWxNb2RlIHsgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6
OkFsbEJ1dENvb2tpZXMgfTsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBtX3N0YW5kYWxvbmVBcHBs
aWNhdGlvbkRvbWFpbjsKICAgICBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiBtX2FwcEJvdW5k
RG9tYWluczsKKyAgICBWZWN0b3I8Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9kYXRhUmVj
b3JkUmVtb3ZhbENvbXBsZXRpb25IYW5kbGVyczsKKworICAgIFBBTDo6U2Vzc2lvbklEIG1fc2Vz
c2lvbklEOworICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOworICAgIGJv
b2wgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUgeyBmYWxzZSB9Owor
CisgICAgdW5zaWduZWQgbV9vcGVyYXRpbmdEYXRlc1NpemUgeyAwIH07CisgICAgc3RkOjpvcHRp
b25hbDxPcGVyYXRpbmdEYXRlPiBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlOworICAgIHN0ZDo6
b3B0aW9uYWw8T3BlcmF0aW5nRGF0ZT4gbV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGU7CisgICAg
T3BlcmF0aW5nRGF0ZSBtX21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlOworCisgICAgbXV0YWJsZSBX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlVHJhbnNhY3Rpb24gbV90cmFuc2FjdGlvbjsKKworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9vYnNlcnZlZERvbWFpbkNvdW50U3Rh
dGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudDsKKyAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZG9t
YWluSURGcm9tU3RyaW5nU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV90b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21FeGlz
dHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3RvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvRXhpc3RzU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUxhc3RT
ZWVuU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhclByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVHcmFuZGZh
dGhlcmVkU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV91cGRhdGVJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jb3VudFByZXZhbGVudFJlc291cmNlc1N0
YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NvdW50UHJldmFs
ZW50UmVzb3VyY2VzV2l0aG91dFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0UmVzb3VyY2VE
YXRhQnlEb21haW5OYW1lU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRBbGxEb21haW5zU3RhdGVtZW50OworICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9kb21haW5T
dHJpbmdGcm9tRG9tYWluSURTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldEFsbFN1YlN0YXRpc3RpY3NTdGF0ZW1lbnQ7
CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXBTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zY3JpcHRMb2Fk
RXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViUmVzb3VyY2VFeGlz
dHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9vYnNlcnZlZERvbWFp
bnNFeGlzdHNTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX3JlbW92ZUFsbERhdGFTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2VhcmxpZXN0VGltZXNU
b1NlbmRTdGF0ZW1lbnQ7CisgICAgCisgICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0QXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRBc0V4cGlyZWRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3Rh
dGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
Y2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhckV4cGlyZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXR0cmlidXRpb25zU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3Rh
dGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
ZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlQXR0cmlidXRpb25zRWFy
bGllc3RUaW1lVG9TZW5kU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRv
U291cmNlU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKaW5kZXggNGRiODA3YTdkOWQ3MDU0MDFlZDU5YTZjZWVlMmFkN2IyNDA2
Nzc0MC4uNjU5YjM5MGE0YThkMzY5ZTM1OTMxMDA1Y2NjNjE3MTliYjQ5ZmY3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTM0LDggKzM0
LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFu
YWdlci5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgi
Ci0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRm
YXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2lu
Y2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKQEAgLTE2NCwxMCArMTYzLDcgQEAgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoTmV0d29y
a1Nlc3Npb24mIG4KIAogICAgIGlmICghcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5p
c0VtcHR5KCkpIHsKICAgICAgICAgcG9zdFRhc2soW3RoaXMsIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlzb2xhdGVkQ29w
eSgpLCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBzZXNzaW9uSUQgPSBuZXR3b3JrU2Vzc2lvbi5z
ZXNzaW9uSUQoKV0gewotICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBtYWtlVW5pcXVl
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqdGhpcywgbV9zdGF0aXN0aWNz
UXVldWUsIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJl
Y3RvcnksIHNlc3Npb25JRCk7Ci0KLSAgICAgICAgICAgIGF1dG8gbWVtb3J5U3RvcmUgPSBtYWtl
VW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlz
dGljc1F1ZXVlLCBzaG91bGRJbmNsdWRlTG9jYWxob3N0KTsKLSAgICAgICAgICAgIGRvd25jYXN0
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUu
Z2V0KCkpLnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKCptZW1vcnlTdG9yZSk7CisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZSA9IG1ha2VVbmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPigqdGhpcywgbV9zdGF0aXN0aWNzUXVldWUsIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QsIHJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIHNlc3Npb25JRCk7CiAKICAgICAgICAgICAg
IGF1dG8gbGVnYWN5UGxpc3RGaWxlUGF0aCA9IEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCAiZnVsbF9icm93c2luZ19z
ZXNzaW9uX3Jlc291cmNlTG9nLnBsaXN0Iik7CiAgICAgICAgICAgICBpZiAoRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhsZWdhY3lQbGlzdEZpbGVQYXRoKSkKQEAgLTI0MCwxMyArMjM2LDEyIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9yeVN0b3JlRnJv
bURpc2soQ29tcGxldGlvbkhhbmRsCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKICAgICBwb3N0VGFzayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUgJiYgaXM8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKLSAgICAgICAgICAgIGF1
dG8mIGRhdGFiYXNlU3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKTsKLSAgICAgICAgICAgIGlmIChkYXRhYmFzZVN0
b3JlLmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSgpKSB7CisgICAgICAg
IGlmIChtX3N0YXRpc3RpY3NTdG9yZSAmJiBpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+
KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKKyAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9y
ZS0+aXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkpIHsKICAgICAgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2VTdG9yZS5zZXRJc05ld1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUoZmFsc2UpOworICAgICAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5zZXRJc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZUZpbGUoZmFsc2UpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcG9zdFRh
c2tSZXBseShbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICAgICAgICAgIGxvZ1Rlc3RpbmdFdmVudCgiUG9wdWxhdGVkV2l0aG91dEdy
YW5kZmF0aGVyaW5nIl9zKTsKQEAgLTMxMCwxMiArMzA1LDEyIEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRGF0YWJhc2VIYXNBbGxUYWJsZXMoQ29tcGxl
dGlvbkhhCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFz
ayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsgCi0gICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7Cisg
ICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBtaXNzaW5nVGFibGVzID0gZG93
bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NT
dG9yZSkuY2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKKyAgICAgICAgYXV0byBtaXNz
aW5nVGFibGVzID0gbV9zdGF0aXN0aWNzU3RvcmUtPmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2No
ZW1hKCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2hhc0FsbFRhYmxlcyA9IG1pc3NpbmdUYWJs
ZXMgPyBmYWxzZSA6IHRydWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFz
QWxsVGFibGVzKTsKICAgICAgICAgfSk7CkBAIC0zMjcsMTIgKzMyMiwxMiBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlQ29sdW1uc0ZvclRh
YmxlKGNvbnN0IFN0cgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0
VGFzayhbdGhpcywgdGFibGUgPSB0YWJsZS5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3Rv
cmUpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgYXV0byBjb2x1bW5zID0gZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkuY29sdW1uc0ZvclRhYmxlKHRhYmxlKTsKKyAg
ICAgICAgYXV0byBjb2x1bW5zID0gbV9zdGF0aXN0aWNzU3RvcmUtPmNvbHVtbnNGb3JUYWJsZSh0
YWJsZSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbHVtbnMgPSBXVEZNb3ZlKGNvbHVtbnMp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUoY29sdW1ucykpOwog
ICAgICAgICB9KTsKQEAgLTczNSw4ICs3MzAsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5VGFza3MoKQogICAgIHBvc3RUYXNrKFt0aGlzXSB7CiAg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
ICAgICBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZSkpCi0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkucnVuSW5jcmVtZW50YWxWYWN1
dW1Db21tYW5kKCk7CisgICAgICAgICAgICBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQorICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKICAgICAgICAgfQogICAgIH0pOwog
fQpAQCAtODg5LDEyICs4ODQsMTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKGNvbnN0IFJlZ2kKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkRvbWFpbiA9
IHN1YkRvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRG9tYWluID0gdG9wRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgeworICAg
ICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgYm9vbCBpc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSA9IGRvd25jYXN0PFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmlz
Q29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChzdWJEb21haW4sIHRvcERvbWFpbik7CisgICAgICAg
IGJvb2wgaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UgPSBtX3N0YXRpc3RpY3NTdG9y
ZS0+aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KHN1YkRvbWFpbiwgdG9wRG9tYWluKTsKICAg
ICAgICAgCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVsYXRpb25zaGlwT25seUluRGF0YWJh
c2VPbmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWxhdGlvbnNoaXBP
bmx5SW5EYXRhYmFzZU9uY2UpOwpAQCAtMTE1MSw4ICsxMTQ2LDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
U2hvdWxkR3IKICAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFu
ZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRpc3Rp
Y3NTdG9yZSkgewogICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Z3JhbmRm
YXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNh
bGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NT
dG9yZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKS5zZXRJc05ld1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0SXNOZXdSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKHRydWUpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fc3RhdGlzdGljc1N0b3JlIGlzIG51
bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsKICAgICAgICAgICAgIH0KQEAg
LTExODUsMTIgKzExODAsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQgZG9tYWluSUQsIENvbXAKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbklELCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgeworICAgICAgICBpZiAoIW1f
c3RhdGlzdGljc1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+KCptX3N0
YXRpc3RpY3NTdG9yZSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBhdXRvJiBkYXRhYmFzZVN0
b3JlID0gZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0
YXRpc3RpY3NTdG9yZSk7Ci0gICAgICAgIGJvb2wgZG9tYWluSURFeGlzdHMgPSBkYXRhYmFzZVN0
b3JlLmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShkb21haW5JRCk7CisgICAgICAgIGJvb2wgZG9t
YWluSURFeGlzdHMgPSBtX3N0YXRpc3RpY3NTdG9yZS0+ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGRvbWFpbklEKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbZG9tYWluSURFeGlzdHMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkb21haW5JREV4aXN0cyk7CiAgICAgICAgIH0p
OwpAQCAtMTQ0OCw3ICsxNDQyLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN1c3BlbmQoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXQKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgc2hhcmVkU3RhdGlzdGljc1F1ZXVlKCktPnN1
c3BlbmQoW10oKSBtdXRhYmxlIHsKLSAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZVN0b3JlIDog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFsbFN0b3JlcygpKQorICAgICAg
ICBmb3IgKGF1dG8mIGRhdGFiYXNlU3RvcmUgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmFsbFN0b3JlcygpKQogICAgICAgICAgICAgZGF0YWJhc2VTdG9yZS0+aW50ZXJydXB0KCk7CiAg
ICAgfSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9PcGVyYXRpbmdEYXRlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL09wZXJhdGluZ0RhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjVhMmI4MWZmN2ZhMDgx
NWQwMGRmNTJmNjI1NzVhMjYyYzM2ODNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9PcGVyYXRpbmdEYXRlLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBPcGVyYXRpbmdEYXRlIHsKK3B1YmxpYzoKKyAgICBPcGVy
YXRpbmdEYXRlKCkgPSBkZWZhdWx0OworICAgIAorICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZy
b21XYWxsVGltZShXYWxsVGltZSk7CisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9kYXkoKTsK
KyAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3Q7CisgICAgaW50IHllYXIoKSBj
b25zdCB7IHJldHVybiBtX3llYXI7IH0KKyAgICBpbnQgbW9udGgoKSBjb25zdCB7IHJldHVybiBt
X21vbnRoOyB9CisgICAgaW50IG1vbnRoRGF5KCkgY29uc3QgeyByZXR1cm4gbV9tb250aERheTsg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7
CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERh
eSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikKKyAgICAgICAgLCBtX21vbnRoKG1vbnRoKQorICAg
ICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCisgICAgeyB9CisKK3ByaXZhdGU6CisgICAgaW50
IG1feWVhciB7IDAgfTsKKyAgICBpbnQgbV9tb250aCB7IDAgfTsgLy8gWzAsIDExXS4KKyAgICBp
bnQgbV9tb250aERheSB7IDAgfTsgLy8gWzEsIDMxXS4KK307CisKK2NvbnN0ZXhwciB1bnNpZ25l
ZCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgeyAzMCB9OworY29uc3RleHByIHVuc2lnbmVkIG9w
ZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgeyA3IH07Citjb25zdGV4cHIgU2Vjb25kcyBvcGVyYXRp
bmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZyB7IDFfaCB9OworCitlbnVtIGNsYXNzIE9wZXJh
dGluZ0RhdGVzV2luZG93IDogdWludDhfdCB7IExvbmcsIFNob3J0LCBGb3JMaXZlT25UZXN0aW5n
LCBGb3JSZXByb1Rlc3RpbmcgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApp
bmRleCA2NmFlZGE0M2M4MmQ4YmZiMzM1YmJmZWY2MDk1ZDA0ZWZhZGI4NjIwLi4zOTFhZDk2ZWM3
NTBhYTE2Njc4OWRjMjlhNDYzMmY1NDc4ZDdjODZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTgzLDggKzgz
LDYgQEAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldFN0cmVhbS5jcHAKIE5ldHdvcmtQcm9j
ZXNzL1BpbmdMb2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvUHJlY29ubmVjdFRhc2suY3BwCiAKLU5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuY3BwCi1OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFn
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBmZTNkMzJiMzI5NWMyYzQ0ZmQ0NDQ0Y2RkN2YxNDFmMjQwMDRjYTAyLi5kYmI1YTgz
ZDUxYmUxZjM4MjQ3YTQ0MDZlMjY4YWRkM2ViMzkzNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMDAsNiArMTAwMCw4IEBACiAJ
CTQ5QkNBMTkyMjNBMTc3NjYwMDI4QTgzNiAvKiBBUElSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmly
c3RQYXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlCQ0ExOTEyM0ExNzc2NjAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJz
dFBhcnR5LmggKi87IH07CiAJCTQ5QkNBMTk1MjNBMThDRkQwMDI4QTgzNiAvKiBfV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUJDQTE5MDIzQTE3NTQ5MDAyOEE4MzYgLyogX1dL
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oICovOyB9OwogCQk0OUJD
QTE5NzIzQTE5MzBEMDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFy
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QkNB
MTk2MjNBMThGNjIwMDI4QTgzNiAvKiBBUElSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eS5oICovOyB9OworCQk0OUNFQjRGRTI2RDZDMTc3MDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUNFQjRG
RDI2RDZDMTc3MDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5jcHAgKi87IH07CisJCTQ5Q0VCNTAx
MjZENkMyMkUwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUNFQjUwMDI2RDZDMjEwMDAxQTRDNjMgLyogT3Bl
cmF0aW5nRGF0ZS5oICovOyB9OwogCQk0OUVDQTQxQzIzRkNBNUQ4MDAyMzM1OEQgLyogUG9saWN5
RGVjaXNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUNBNDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oICovOyB9OwogCQk0
OUZCRUZGRDIzOUIwMTFEMDBCRDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHkubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OUZCRUZGQzIzOUIwMTFEMDBCRDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0
UGFydHkubW0gKi87IH07CiAJCTQ5RkJFRkZGMjM5QjAxMkYwMEJEMDMyRiAvKiBfV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkJFRkZFMjM5QjAxMkYwMEJEMDMyRiAvKiBfV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eS5tbSAqLzsgfTsKQEAgLTEzNDYsNyArMTM0OCw2IEBA
CiAJCTdBQjZFQTQ3MUVFQUI2QjgwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUI2RUE0NjFF
RUFCNkIwMDAwMzdCMkIgLyogQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oICovOyB9OwogCQk3QUYy
MzYyMTFFNzlBNDA4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUgLyogV2Vi
RXJyb3JzLmggKi87IH07CiAJCTdBRkJEMzYzMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBRkJEMzYyMjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCAqLzsgfTsKLQkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNCIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovOyB9OwogCQk3QUZCRDM2RjIxRTU0NkY4
MDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGQkQzNkQyMUU1NDZFMzAwNURCQUNCIC8qIFBlcnNpc3Rl
bmN5VXRpbHMuaCAqLzsgfTsKIAkJN0IxREIyNjYyNTY2OENFMTAwMEUyNkJDIC8qIEFycmF5UmVm
ZXJlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QjFEQjI2NTI1NjY4Q0UwMDAwRTI2QkMgLyogQXJyYXlSZWZlcmVuY2UuaCAqLzsgfTsKIAkJN0I0
ODNGMUYyNUNEREE5QzAwMTIwNDg2IC8qIE1lc3NhZ2VSZWNlaXZlUXVldWVNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCNDgzRjFCMjVDRERBOUIw
MDEyMDQ4NiAvKiBNZXNzYWdlUmVjZWl2ZVF1ZXVlTWFwLmggKi87IH07CkBAIC0zOTc0LDYgKzM5
NzUsOCBAQAogCQk0OUJDQTE5MDIzQTE3NTQ5MDAyOEE4MzYgLyogX1dLUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRmlyc3RQYXJ0eUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ5QkNBMTkxMjNBMTc3NjYwMDI4QTgzNiAvKiBBUElSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRmlyc3RQYXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Rmlyc3RQYXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUJDQTE5NjIzQTE4
RjYyMDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDRUI0RkQyNkQ2QzE3NzAwMUE0QzYzIC8qIE9wZXJh
dGluZ0RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT3BlcmF0aW5nRGF0ZS5jcHA7IHBhdGgg
PSBDbGFzc2lmaWVyL09wZXJhdGluZ0RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUNFQjUwMDI2RDZDMjEwMDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBPcGVyYXRpbmdEYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
REFBMzhCMjRDQkExQTgwMDc5M0Q3NSAvKiBEZWZhdWx0V2ViQnJvd3NlckNoZWNrcy5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IERlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OURBQTM4RDI0Q0JBMUJEMDA3OTNENzUgLyogRGVmYXVsdFdl
YkJyb3dzZXJDaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVmYXVsdFdlYkJyb3dzZXJDaGVja3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFQ0E0MUIyM0ZDQTQ4NjAwMjMzNThE
IC8qIFBvbGljeURlY2lzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbGljeURlY2lzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjI1LDggKzQ2MjgsOCBAQAogCQk3NUE4RDJD
NTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1
NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5o
OyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBMEQ3ODYxMjIwNzkxRUMw
MEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHBhdGggPSBD
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdB
MTUwNjcyMURENTYyOTgwMDFGNEI1OCAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24u
c2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gImNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1v
bi5zYiI7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViS2l0LnBs
dWdpbi1jb21tb24uc2IiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3
QTFFMkE4NDFFRUZFODhBMDAzN0EwRTAgLyogQVBJTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EzQUNFMUExRUVFRjc4QzAwQTg2NEE0IC8q
IEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2NDgsMTQgKzQ2NTEsMTAgQEAKIAkJN0FCNEVBNDIy
Mjc3ODBERDAwODVCQkFBIC8qIFNhbmRib3hVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBTYW5kYm94VXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUljb25EYXRhYmFzZUNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJ
R2VvbG9jYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElHZW9sb2NhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdB
Q0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUNFODJFODIyMUNBRTA3MDAwREE5NEMgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHBhdGggPSBDbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBRjIzNjFFMUU3OUEzQjQwMDQzOEEwNSAvKiBXZWJFcnJvcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRXJyb3JzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVy
cm9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFcnJvcnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MjIxRTc5QTQzMTAwNDM4QTA1IC8qIFdl
YkVycm9yc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViRXJyb3JzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkJEMzYy
MjFFNTBGMzkwMDVEQkFDQiAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJBQ0Ig
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFD
QiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg7IHBh
dGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVy
c2lzdGVuY3lVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQZXJzaXN0ZW5jeVV0aWxzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRkJEMzZFMjFFNTQ2RTMwMDVEQkFDQiAvKiBQZXJz
aXN0ZW5jeVV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBlcnNpc3RlbmN5VXRpbHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QjFEQjI2NTI1NjY4Q0UwMDAwRTI2QkMg
LyogQXJyYXlSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJy
YXlSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkzNzUsMTIgKzkz
NzQsMTAgQEAKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTdBMEQ3ODYyMjIwNzkx
RUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgKi8s
Ci0JCQkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmggKi8sCi0JCQkJN0FGQkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8sCi0JCQkJN0FGQkQzNjUyMUU1MUJB
QjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovLAotCQkJ
CTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwICovLAotCQkJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk0OUNFQjRGRDI2RDZDMTc3MDAxQTRDNjMgLyogT3BlcmF0
aW5nRGF0ZS5jcHAgKi8sCisJCQkJNDlDRUI1MDAyNkQ2QzIxMDAwMUE0QzYzIC8qIE9wZXJhdGlu
Z0RhdGUuaCAqLywKKwkJCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCiAJCQkJN0E0MUU5RkEyMUY4MURBQzAw
Qjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oICovLAogCQkJCTdBM0ZFQ0Ex
MjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggKi8sCiAJCQkJN0E4NDNB
MUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
Ki8sCkBAIC0xMjI0OCw2ICsxMjI0NSw3IEBACiAJCQkJMzc1NEQ1NDUxQjNBMjlGRDAwM0E0QzdG
IC8qIE5TSW52b2NhdGlvblNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERDcyQUIyNjgyMTY3
MzAwQTkwQzcxIC8qIE5XUGFyYW1ldGVyc1NQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QUNB
MTMxNjY3MEQ4OTAwNEMxOTQxIC8qIE9iakNPYmplY3RHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDlDRUI1MDEyNkQ2QzIyRTAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY0RUI0QUZEMjY5Q0Q3RjMwMEQyOTdBRSAvKiBPU1N0YXRlU1BJLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM2RURBQTYxMTEyNzFDNjAwRTc2NzhCIC8qIFBhZ2VDbGllbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMTIzNzUsNyArMTIzNzMsNiBAQAogCQkJCTVDQjdBRkU3MjND
NjgyMDcwMEU0OUNGMyAvKiBSZXNvdXJjZUxvYWRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
QkU5NjlDRDFFNTRFMDU0MDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTZCRTk2OUNCMUU1NEQ0Q0YwMDhCNzQ4MyAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmggaW4gSGVhZGVycyAqLywKLQkJCQk3
QUZCRDM2NzIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTMwMDY2RTExMTBGNEY3MDAzMTkzN0MgLyogUmVz
cG9uc2l2ZW5lc3NUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEwNDgyQ0UxREREMzI0RjAw
RjAwNkQwIC8qIFJUQ05ldHdvcmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RjM4RThDMjQxNkU2
NzMwMDU5Mzc1QSAvKiBSdW5uaW5nQm9hcmRTZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0xNDI2NCw2ICsxNDI2MSw3IEBACiAJCQkJMkQ5MTM0NDcyMTJDRjlGMDAwMTI4QUZEIC8qIE5Q
UnVudGltZU9iamVjdE1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkxMzQ0ODIxMkNGOUYw
MDAxMjhBRkQgLyogTlBSdW50aW1lVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJE
OTJBNzk0MjEyQjZBRDQwMEY0OTNGRCAvKiBOUFZhcmlhbnREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQ5Q0VCNEZFMjZENkMxNzcwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUNEQTI5QTI4MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Np
b25NYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEQTI5QTJB
MUNCRUI2N0EwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDkyMTJDRjlGMDAwMTI4QUZEIC8q
IFBsdWdpbi5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436433</attachid>
            <date>2021-08-25 15:58:28 -0700</date>
            <delta_ts>2021-08-26 16:56:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229512-20210825155827.patch</filename>
            <type>text/plain</type>
            <size>545707</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYwYzkwNDkwMTU1MzA0M2I1
YTIzNjAwMDU3ZWQzZjNiODcyNDRhZjYuLjhmYjQ5YTQwNjRkOTcxZGFlMDBiZTFkMDA1MDc3NGM0
OWY3MDExYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMwIEBACisyMDIxLTA4LTI1ICBLYXRlIENo
ZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBJVFAgbWVtb3J5IHN0b3JlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTUxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzA3
NDMyNTg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFBDTSBhbmQgSVRQIGxheW91dCBhbmQg
QVBJIHRlc3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgYW5kIG1lcmdlcworICAgICAgICBmdW5jdGlvbnMgZnJvbSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSB3aXRoIGl0cyBwYXJlbnQKKyAgICAgICAg
Y2xhc3MgdG8gaGF2ZSBhIHNpbmdsZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3Mu
CisKKyAgICAgICAgSSB0b29rIHRoaXMgY2hhbmNlIHRvIGFsc28gdHJ5IGFuZCBiZXR0ZXIgb3Jn
YW5pemUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBoZWFkZXIgZmls
ZSB0byBjbHVtcCByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlci4gQW5kLCBJIHJlbW92ZWQgc29t
ZQorICAgICAgICB1bnVzZWQgZnVuY3Rpb25zIEkgZm91bmQgd2hlbiBtaWdyYXRpbmcuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL09wZXJhdGluZ0RhdGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRl
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgTW92ZSBPcGVyYXRpbmdEYXRlIGNvZGUgdG8g
aXRzIG93biBmaWxlIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mCisgICAgICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEpOgor
ICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToK
KyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAg
KFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Om5l
ZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpvcGVuSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNj
aGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlz
c2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVkU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6aW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmludGVycnVwdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlVW5pcXVlSW5k
aWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3Jl
YXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpkZXN0cm95U3RhdGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZUFu
ZE1ha2VEb21haW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0
aWMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdl
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OmpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0VGhp
cmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6aGFzQmVlblRoaXJkUGFydHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpbmROb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFj
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFsbERvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0
S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4
cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxC
dXRDb29raWVzRm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3Ry
YWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUxhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OmFwcGVuZEJvb2xlYW4pOgorICAgICAgICAo
V2ViS2l0OjphcHBlbmROZXh0RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGlj
U3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRp
c3RpY3NFeHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlVW5hdHRyaWJ1dGVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphdHRyaWJ1dGVQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJTZW50QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0YW5kYWxvbmVB
cHBsaWNhdGlvbkRvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhck9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6d29ya1F1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om1vbnRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6bW9udGhEYXkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdE
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc01lbW9yeVN0b3Jl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc0RhdGFiYXNlU3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9y
eVN0b3JlRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlQ29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VzcGVuZCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om1vbnRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
bW9udGhEYXkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRp
bmdEYXRlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0wOC0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFtSQlNUYXJnZXQgdGFyZ2V0V2l0aFBpZDpd
IGR1cmluZyBXZWJQcm9jZXNzUHJveHk6OnNodXREb3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDdmNWIxOTI0MzNlY2FjYjEwMDNhYmQzNWYxMzU0MzViYTE2YWVhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9PcGVyYXRp
bmdEYXRlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wZXJhdGluZ0RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOworICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKK30KKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkp
OworfQorCitTZWNvbmRzIE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9u
dGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0Rh
dGU6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVy
Lm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdE
YXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwor
fQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlOGQyZGIzYzc1ZDljYjJkNjg3YjI1YjlhZWJl
MDBjMjBjOWZiMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0NvbnNvbGVUeXBlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNj
ZXNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
R2VzdHVyZUluZGljYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBJVFBfUkVMRUFTRV9MT0coc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBJVFBfUkVM
RUFTRV9MT0dfRVJST1Ioc2Vzc2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQotCi0vLyBDT1VOVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBv
YnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWRE
b21haW5zIl9zOwotY29uc3RleHByIGF1dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVy
eSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Ci1j
b25zdGV4cHIgYXV0byBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3Vi
cmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0
ZXhwciBhdXRvIGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0ZXhwciBhdXRv
IGNvdW50UHJldmFsZW50UmVzb3VyY2VzUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJl
Z2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9
IDE7Il9zOwotY29uc3RleHByIGF1dG8gY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWlu
KSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDE7Il9zOwotCi1jb25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1Qg
cmVnaXN0cmFibGVEb21haW4pIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMDsiX3M7Ci0KLS8vIElOU0VSVCBPUiBJR05P
UkUgUXVlcmllcwotY29uc3RleHByIGF1dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJ
TlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2Vlbiwg
aGFkVXNlckludGVyYWN0aW9uLCIKLSAgICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUs
IGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIK
LSAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9t
YWluUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChk
b21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50
byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxl
RG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUg
aW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50IChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZy
b21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURv
bWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVn
aXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBpbiAoICJfczsKLQotLy8gSU5TRVJUIE9SIFJFUExBQ0UgUXVlcmllcwotY29uc3RleHBy
IGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBM
QUNFIGludG8gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwg
bGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyB3aGVyZSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKLWNvbnN0
ZXhwciBhdXRvIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0
VXBkYXRlZCwgZnJvbURvbWFpbklEKSBTRUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0
byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFp
bklELCBsYXN0VXBkYXRlZCwgdG9wRnJhbWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwot
Y29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VS
VCBPUiBSRVBMQUNFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3Vy
Y2VEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsK
LWNvbnN0ZXhwciBhdXRvIGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwg
IgotICAgICJzb3VyY2VJRCwgdGltZU9mQWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQp
IFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3M7Ci1jb25zdGV4cHIgYXV0byBpbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFD
RSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFp
bklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgotICAgICJzb3VyY2VJRCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSwgcHJpb3JpdHksIHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
LQotLy8gRVhJU1RTIFF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCi0gICAg
IkFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMg
KFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCi0gICAgIldI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVD
VCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gIgotICAgICJBTkQgdG9E
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Ci1jb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCi0gICAgIkFO
RCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVM
b2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURv
bWFpbklEID0gPyAiCi0gICAgIkFORCBzdWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKLWNvbnN0ZXhwciBhdXRvIHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJ
U1RTIChTRUxFQ1QgMSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVS
RSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotCi0v
LyBVUERBVEUgUXVlcmllcwotY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9
ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKLSAgICAiV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVy
eSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1v
dmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVk
ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byB1cGRh
dGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlz
UHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIg
YXV0byB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ZlcnlQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9
IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRl
R3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRv
IHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byBz
ZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQ
REFURSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGlj
ayA9IC0xLjAiX3M7Ci1jb25zdGV4cHIgYXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVy
eSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBB
TkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gbWFya1Jl
cG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVs
bCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCA9ID8iX3M7Ci0KLS8vIFNFTEVDVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBkb21haW5JREZy
b21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzUHJldmFs
ZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBh
dXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJl
ZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIDwgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFYKGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVw
ZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9t
YWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyJfcwotICAgICJVTklPTiBBTEwgU0VM
RUNUIGxhc3RVcGRhdGVkIEZST00gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRv
RG9tYWluSUQgPSA/IGFuZCBmcm9tRG9tYWluSUQgPSA/IgotICAgICJVTklPTiBBTEwgU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCi0gICAgIlVO
SU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7
Ci1jb25zdGV4cHIgYXV0byBnZXRBbGxEb21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxl
RG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOwotY29uc3RleHByIGF1dG8gZ2V0QWxsU3Vi
U3RhdGlzdGljc1VuZGVyRG9tYWluUXVlcnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IgotICAgICJVTklPTiBBTEwgU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgotICAg
ICJVTklPTiBBTEwgU0VMRUNUIHRvRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8g
YWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOwot
Y29uc3RleHByIGF1dG8gYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkg
PSAiU0VMRUNUICosIE1JTihlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1l
VG9TZW5kVG9EZXN0aW5hdGlvbikgYXMgbWluVmFsICIKLSAgICAiRlJPTSBBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMg
Tk9UIE5VTEwgQU5EIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwg
IgotICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFz
IG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIElTIE5VTEwgIgotICAgICJVTklPTiBBTEwgU0VM
RUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlIElTIE5VTEwgT1JERVIgQlkgbWluVmFsIl9zOwotY29uc3RleHByIGF1dG8gZmluZFVu
YXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25T
aXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBz
b3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7
Ci1jb25zdGV4cHIgYXV0byBlYXJsaWVzdFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlLCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21h
aW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotLy8gRVhJU1RT
IGZvciB0ZXN0aW5nIHF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3Rz
UXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0
aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5JRCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzY3JpcHRMb2FkRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1l
RG9tYWluSUQgPSA/IE9SIHN1YnJlc291cmNlRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBh
dXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9S
IHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhp
c3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1l
RG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVl
cnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJf
czsKLWNvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBF
WElTVFMgKFNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyki
X3M7Ci0KLS8vIERFTEVURSBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVl
cnkgPSAiREVMRVRFIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsK
LWNvbnN0ZXhwciBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRR
dWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBX
SEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgTElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
IExJS0UgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkgPSAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRl
RG9tYWluSUQgTElLRSA/Il9zOwotY29uc3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBXSEVSRSA/ID4gdGltZU9mQWRDbGljayJfczsKLWNvbnN0ZXhwciBhdXRv
IHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2
ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9tYWlucyAoIgotICAgICJkb21haW5J
RCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCi0gICAgImhh
ZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIK
LSAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVH
RVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKLSAgICAi
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9U
IE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5U
RUdFUiBOT1QgTlVMTCwiCi0gICAgImlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7Ci0KLWVudW0gewotICAgIERvbWFpbklESW5kZXgsCi0g
ICAgUmVnaXN0cmFibGVEb21haW5JbmRleCwKLSAgICBMYXN0U2VlbkluZGV4LAotICAgIEhhZFVz
ZXJJbnRlcmFjdGlvbkluZGV4LAotICAgIE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5k
ZXgsCi0gICAgR3JhbmRmYXRoZXJlZEluZGV4LAotICAgIElzUHJldmFsZW50SW5kZXgsCi0gICAg
SXNWZXJ5UHJldmFsZW50SW5kZXgsCi0gICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAotICAg
IElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxJbmRleAotfTsKLQotY29uc3Rl
eHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERv
bWFpbnMgKCIKLSAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05T
VFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgotICAgICJS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OwotICAgIAotY29uc3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zID0gIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
KCIKLSAgICAiZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKLSAgICAiQ09OU1RSQUlOVCBma0RvbWFp
bklEIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAgICAi
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBL
RVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAo
IgotICAgICJzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5D
RVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgotICAgICJG
T1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoIgotICAgICJ0YXJnZXREb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
LCAiCi0gICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8g
Y3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFt
ZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIKLSAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgIgotICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkoZnJv
bURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzICgiCi0gICAgInRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3Vy
Y2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvcEZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVO
Q0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1j
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFU
RSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCi0gICAgInN1YkZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgbGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotICAgIAot
Y29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJD
UkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgotICAgICJzdWJy
ZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5V
TEwsIHRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtF
WShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
KSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAg
ICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFM
IE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBL
RVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7
Ci0gICAgCi1jb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgotICAg
ICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgot
ICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7Ci0KLWNvbnN0ZXhwciBhdXRvIGNyZWF0
ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgotICAgICJ5
ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElO
VEVHRVIgTk9UIE5VTEwpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlE
IElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0
b2tlbiBURVhULCBzaWduYXR1cmUgVEVYVCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNl
U2l0ZURvbWFpbklEKSAiCi0gICAgIlJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklE
KSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQp
IFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50ID0gIkNSRUFURSBUQUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9U
IE5VTEwsICIKLSAgICAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBw
cmlvcml0eSBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIK
LSAgICAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0
dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVB
TCwgIgotICAgICJGT1JFSUdOIEtFWShzb3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMo
ZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotLy8gQ1JFQVRFIFVOSVFVRSBJTkRF
WCBRdWVyaWVzLgotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFp
bklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BM
ZXZlbERvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVY
IElGIE5PVCBFWElTVFMgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudF9zb3VyY2VEb21haW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5J
RCwgdG9Eb21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJ
U1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWlu
SUQgb24gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21E
b21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxp
bmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5
U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c190b3BGcmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQg
b24gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1
YnJlc291cmNlRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3Rv
cEZyYW1lRG9tYWluSUQgb24gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1l
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJy
ZXNvdXJjZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb19zdWJyZXNvdXJjZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3VicmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJv
bURvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGlu
Z0RhdGVzID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRl
c195ZWFyX21vbnRoX21vbnRoRGF5IG9uIE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1v
bnRoRGF5ICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVY
SVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWlu
SURfZGVzdGluYXRpb25TaXRlRG9tYWluSUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICki
X3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlv
blNpdGVEb21haW5JRCBvbiBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3Vy
Y2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Ci0KLS8vIEFkZCBv
bmUgdG8gdGhlIGNvdW50IG9mIHRoZSBhYm92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9y
IHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNh
bGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJlY2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgotY29uc3Qg
aW50IGV4cGVjdGVkSW5kZXhDb3VudCA9IDE0OwotCi1zdGF0aWMgY29uc3QgU3RyaW5nIE9ic2Vy
dmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKQotewotICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERv
bWFpbjsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyBPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVt
YVYxQWx0ZXJuYXRlKCkKLXsKLSAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9t
YWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBU
RVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBO
VUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBO
VUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1Qg
TlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5V
TEwpIl9zOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZFVuYXR0
cmlidXRlZENvbHVtbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAi
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2si
X3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwotICAgIHJldHVybiBj
b2x1bW5zLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhIl9zLCAicHJpb3JpdHkiX3MsICJ0aW1lT2ZBZENsaWNrIl9zLCAiZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2UiX3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlE
Il9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiJfcyB9KTsKLSAgICByZXR1cm4g
Y29sdW1ucy5nZXQoKTsKLX0KLQotc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVhdGVUYWJsZVNjaGVt
YShjb25zdCBTdHJpbmcmIHNjaGVtYSkKLXsKLSAgICByZXR1cm4gc2NoZW1hLmNvbnRhaW5zKCJS
RUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwotfQotCi1zdGF0aWMgU3RyaW5nIHN0cmlwSW5k
ZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjb25zdCBjaGFyKiBvcmlnaW5hbFF1ZXJ5KQotewot
ICAgIHJldHVybiBTdHJpbmcob3JpZ2luYWxRdWVyeSkucmVwbGFjZSgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIiwgIkNSRUFURSBVTklRVUUgSU5ERVgiKTsKLX0KLQotc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFRh
YmxlQW5kSW5kZXhQYWlyPiYgZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpCi17Ci0gICAg
c3RhdGljIGF1dG8gZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBUYWJs
ZUFuZEluZGV4UGFpcj4gewotICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIHN0ZDo6bWFr
ZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVPYnNlcnZlZERvbWFp
biwgc3RkOjpudWxsb3B0KSB9LAotICAgICAgICB7ICJUb3BMZXZlbERvbWFpbnMiX3MsIHN0ZDo6
bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BMZXZlbERv
bWFpbnMsIHN0ZDo6bnVsbG9wdCkgfSwKLSAgICAgICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4
UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMpKSB9LAotICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3Jl
ZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykpIH0sCi0g
ICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+
PihjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
KSkgfSwKLSAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRl
VW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJU
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHN0
cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIH0sCi0gICAgICAgIHsgIlRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJp
bmc+PihjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzKSkgfSwKLSAgICAgICAgeyAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9y
ZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9
LAotICAgICAgICB7ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIH0sCi0gICAg
ICAgIHsgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0
cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgfSwKLSAgICAgICAgeyAiU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJPcGVyYXRpbmdEYXRlcyJfcywg
c3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZU9wZXJh
dGluZ0RhdGVzLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVl
SW5kZXhPcGVyYXRpbmdEYXRlcykpIH0sCi0gICAgICAgIHsgIlVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIHN0cmlw
SW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfSwKLSAgICAgICAgeyAiQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPj4oY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB9Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIGV4
cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotc3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgQ29udGFpbmVyVHlwZSYg
dmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGlj
X3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUodmFsdWUpPj4pCi0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHko
KSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLX0KLQotSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZSo+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsU3RvcmVz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKj4+
IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1
ZSwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi0g
ICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSwgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCkKLSAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCAib2JzZXJ2
YXRpb25zLmRiIl9zKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24obV9kYXRhYmFzZSkKLSAgICAsIG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIGVuYWJsZUZvcmVp
Z25LZXlzKCk7Ci0KLSAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3b3JrZXJRdWV1ZSwgdGhl
IHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQgYnkgZGlmZmVyZW50IHRo
cmVhZHMuCi0gICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0gICAgCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCi0gICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsK
LSAgICBhbGxTdG9yZXMoKS5hZGQodGhpcyk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoKQotewot
ICAgIGNsb3NlKCk7Ci0gICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbG9zZSgpCi17Ci0gICAgZGVzdHJv
eVN0YXRlbWVudHMoKTsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQotewotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lzTmV3UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19M
T0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
YXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01B
IGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOwotICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwgc2V0
QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNOZXdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
U2NoZW1hKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1zdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZScgYW5kIHRibF9uYW1lPT8iX3MpOwotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
cHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkua2V5cygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdU
YWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMs
IHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5k
KFN0cmluZyh0YWJsZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsK
LSAgICB9Ci0gICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIG1pc3NpbmdUYWJsZXM7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKLXsK
LSAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOwotICAgIGlmICghZW5hYmxlRm9yZWlnbktl
eXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsK
LSAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0/IEFORCB0eXBl
ID0gJ3RhYmxlJyJfcyk7Ci0gICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9
IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhR
dWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0
YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2No
ZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdl
dFRhYmxlU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwotCi0gICAgYXV0byBnZXRJbmRleFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlwZSA9ICdpbmRleCciX3MpOwotICAgIGlm
ICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldEluZGV4U3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0
YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3Ry
aW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsKLSAgICAgICAgaWYgKCFyYXdJ
bmRleC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwotICAgIH0KLQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4o
V1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRleCkpOwotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFNjaGVtYSgpCi17Ci0gICAgYXV0byBjdXJyZW50U2NoZW1hID0gY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKCJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpLmZpcnN0OwotCi0gICAgaWYgKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSAmJiBjdXJyZW50
U2NoZW1hICE9IGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKLXsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7Ci0gICAg
aWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRp
Y2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJy
b3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmIChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3Np
bmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpCi17Ci0gICAgLy8gQ2hlY2sgYSB0YWJsZSBm
b3IgYSByZWZlcmVuY2UgdG8gVG9wTGV2ZWxEb21haW5zLCBhIHNpZ24gb2YgdGhlIG9sZCBzY2hl
bWEuCi0gICAgYXV0byBvbGRTY2hlbWEgPSBjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8iX3MpLmZpcnN0OwotICAgIHJldHVybiBuZWVkc05ld0Ny
ZWF0ZVRhYmxlU2NoZW1hKG9sZFNjaGVtYSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFNjaGVtYSgpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBvdGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUg
dG8gdXBncmFkZXMuCi0gICAgLy8gQWxsIG90aGVyIHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0
ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRoZXkgYXJlIGNvcnJlY3QuCi0gICAgaWYgKG1p
c3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlzc2luZ1VuaXF1ZUluZGljZXMoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFu
ZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBVTlVTRURfUEFSQU0odGFibGUpOwot
ICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBl
Y3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGlu
c2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCi17Ci0gICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1
YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRlZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBf
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBHUk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0
b3BGcmFtZURvbWFpbklEIl9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBz
dWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZS
T00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VE
b21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7Ci0KLSAgICBpZiAodGFibGUgPT0gIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxhc3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9N
IF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWlu
SUQsIHRvRG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklE
LCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWluSUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQsIGZyb21Eb21haW5JRCJfcyk7Ci0KLSAgICBp
ZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKLSAgICAg
ICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFTEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRl
c3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJRCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tl
biwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
Il9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJ
TlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJp
Z2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9mQWRDbGljayksIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAg
Qlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcyk7Ci0KLSAg
ICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJU
IElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJTkNUICogRlJPTSBfIiwgdGFibGUpKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoIW5lZWRzVXBkYXRlZFNjaGVtYSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3Rl
ZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAgIGF1dG8gYWx0ZXJUYWJs
ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiQUxURVIgVEFC
TEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJsZSkpOwotICAgICAgICBpZiAoIWFsdGVy
VGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY3JlYXRlU2NoZW1hKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBhdXRvIG1pZ3JhdGVUYWJs
ZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
dGFibGUpOwotICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0
YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdyYXRlIHNjaGVtYSwg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUpKTsKLSAgICAg
ICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3Nh
Z2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghY3JlYXRlVW5pcXVlSW5kaWNlcygpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1
bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0g
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VT
dHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7Ci0KLSAgICBpZiAo
IXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21UYWJsZUlu
Zm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnM7
Ci0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpOwotICAgICAgICBjb2x1bW5zLmFw
cGVuZChuYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxl
KFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBleGlzdGluZ0NvbHVt
bnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQotewotICAgIEFTU0VS
VChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0g
ICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKLSAgICAgICAgaWYgKGV4
aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwotICAgICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRp
bmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgfQotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9
ICJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKLSAgICBjb25zdCBhdXRv
IGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
Il9zOwotCi0gICAgYWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFt
ZSwgY29sdW1uc0ZvclRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRy
aWJ1dGVkQ29sdW1ucygpKTsKLSAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRl
ZFRhYmxlTmFtZSwgY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhp
c3RpbmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUm
JiBleHBlY3RlZENvbHVtbk5hbWUpCi17Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3Rl
ZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1
bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEF0
dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgotICAgIGNvbnN0IGF1dG8g
YXR0cmlidXRlZFRhYmxlTmFtZSA9ICJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3M7Ci0gICAgY29uc3QgYXV0byBvbGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4gPSAiZWFybGll
c3RUaW1lVG9TZW5kIl9zOwotICAgIGNvbnN0IGF1dG8gbmV3RWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zOwotICAgIGNvbnN0IGF1dG8gb2xk
QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbiA9ICJhdHRyaWJ1dGVPblNpdGVEb21haW5JRCJf
czsKLSAgICBjb25zdCBhdXRvIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3M7Ci0gICAgY29uc3QgYXV0byBmb3VuZEF0dHJpYnV0ZWRU
YWJsZUNvbHVtbnMgPSBjb2x1bW5zRm9yVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSk7Ci0KLSAg
ICBpZiAoZm91bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zLmNvbnRhaW5zKG9sZEVhcmxpZXN0VGlt
ZVRvU2VuZENvbHVtbikpCi0gICAgICAgIHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRh
YmxlTmFtZSwgb2xkRWFybGllc3RUaW1lVG9TZW5kQ29sdW1uLCBuZXdFYXJsaWVzdFRpbWVUb1Nl
bmRDb2x1bW4pOwotCi0gICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlu
cyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKSkKLSAgICAgICAgcmVuYW1lQ29sdW1u
SW5UYWJsZShhdHRyaWJ1dGVkVGFibGVOYW1lLCBvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uLCBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKTsKLQotICAgIC8vIFVuYXR0cmli
dXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGNhc2UuCi0gICAgYXV0byB1bmF0dHJpYnV0
ZWRUYWJsZU5hbWUgPSAiVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3M7Ci0g
ICAgYXV0byBmb3VuZFVuYXR0cmlidXRlZFRhYmxlQ29sdW1ucyA9IGNvbHVtbnNGb3JUYWJsZSh1
bmF0dHJpYnV0ZWRUYWJsZU5hbWUpOwotCi0gICAgaWYgKGZvdW5kVW5hdHRyaWJ1dGVkVGFibGVD
b2x1bW5zLmNvbnRhaW5zKG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4pKQotICAgICAg
ICByZW5hbWVDb2x1bW5JblRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRp
b25EZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdU
YWJsZXNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgYXV0byBtaXNzaW5nVGFibGVzID0gY2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKLSAgICBpZiAoIW1pc3NpbmdUYWJsZXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewotICAg
ICAgICBhdXRvIGNyZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkuZ2V0KHRhYmxlKS5maXJzdDsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kU2xvdyhjcmVhdGVUYWJsZVF1ZXJ5KSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdUYWJsZXMgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5B
bmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCi17Ci0gICAgb3BlbklUUERhdGFiYXNlKCk7Ci0g
ICAgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7Ci0gICAgICAgIGlmICghc3Rh
dGVtZW50KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJs
ZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0
ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwotICAgICAgICAg
ICAgY2xvc2UoKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdl
RGlyZWN0b3J5UGF0aCk7Ci0gICAgICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGUgT2JzZXJ2ZWREb21haW5zIHNjaGVtYSBpbiB0aGUg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkaXJlY3RvcnkgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVt
YSwgZGVsZXRlIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgIC8vIEZJWE1FOiBNaWdyYXRlIG9sZCBP
YnNlcnZlZERvbWFpbnMgZGF0YSB0byBuZXcgdGFibGUgc2NoZW1hLgotICAgIGlmIChjdXJyZW50
U2NoZW1hICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKSAmJiBjdXJyZW50U2NoZW1h
ICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUoKSkgewotICAgICAgICBj
bG9zZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURpcmVjdG9y
eVBhdGgpOwotICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFJlbmFtaW5nIGFuZCBhZGRpbmcgY29sdW1ucyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgbWlncmF0aW5nIHRvIGF2b2lkIG1pc21hdGNoZWQgb3IgbWlzc2luZyBjb2x1bW5zLgot
ICAgIHJlbmFtZUNvbHVtbnNJZk5lY2Vzc2FyeSgpOwotICAgIGFkZE1pc3NpbmdDb2x1bW5zSWZO
ZWNlc3NhcnkoKTsKLSAgICBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLX0K
LQotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmlu
ZyYgbG9nU3RyaW5nKSBjb25zdAotewotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgIGF1
dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVl
cnkpOwotICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9Owot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1l
bnQuZ2V0KCkgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW50ZXJydXB0KCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
bV9kYXRhYmFzZS5pbnRlcnJ1cHQoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNv
dW50UXVlcnksICJpc0VtcHR5Il9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc0VtcHR5IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOwotfQotCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzKCkKLXsK
LSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykK
LSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KQot
ICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pCi0g
ICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9w
RnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KQotICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCi0gICAgICAgIHx8ICFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VW5pcXVlSW5kZXhPcGVyYXRpbmdEYXRlcykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2JzZXJ2ZWREb21haW4pKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wTGV2ZWxEb21haW5zKSkgewotICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudCB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNy
ZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZUxv
YWRlZFRoaXJkUGFydHlTY3JpcHRzKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPcGVyYXRpbmdEYXRlcykpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9wZXJhdGluZ0RhdGVzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgewot
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkZXN0cm95U3RhdGVtZW50cygpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX29ic2VydmVkRG9tYWluQ291bnRTdGF0ZW1l
bnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQgPSBudWxs
cHRyOwotICAgIG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0
cjsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZUlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3RvcEZyYW1lTGlu
a0RlY29yYXRpb25zRnJvbUV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV90b3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvdW50UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2NvdW50
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVt
ZW50ID0gbnVsbHB0cjsKLSAgICBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2dldEFsbFN1YlN0YXRpc3RpY3NTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fc3RvcmFnZUFj
Y2Vzc0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9nZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2xpbmtEZWNvcmF0aW9uRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fb2JzZXJ2ZWREb21haW5zRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZUFsbERhdGFTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1faW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRT
dGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NldFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2Ns
ZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2ZpbmRV
bmF0dHJpYnV0ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RUaW1lVG9T
ZW5kU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCA9IG51bGxwdHI7Ci0gICAgbV9tYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCA9IG51bGxwdHI7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbklEKGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGRvbWFpbnMgbm90
IGluIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudCwgaW5zZXJ0
T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydE9ic2VydmVkRG9tYWluIl9zKTsKLSAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91
YmxlKExhc3RTZWVuSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsIGxvYWRTdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChHcmFu
ZGZhdGhlcmVkSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwg
bG9hZFN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgbG9hZFN0
YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIGxvYWRT
dGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nl
c3NBUElJbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
U3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGxv
YWRTdGF0aXN0aWNzLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291cmNlKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWRE
b21haW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiBzdGF0ZW1lbnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFm
aXJzdERvbWFpbklEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXN0YXRlbWVudAotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKmZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHNlY29uZERvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4u
c3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5JbnQoMCk7Ci19Ci0KLVN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbkxpc3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKLSAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQotICAgICAgICBpZiAoZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVSZXNvdXJjZSkuc2Vjb25kKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsICciJywgdG9wRnJhbWVSZXNv
dXJjZS5zdHJpbmcoKSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQot
ewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7Ci0gICAgCi0gICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKLSAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0Ui
KSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91Ymxl
KDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSykgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFp
bklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICAKLSAgICBpZiAoIXJl
Z2lzdHJhYmxlRG9tYWluSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFi
bGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlv
bnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwg
cmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVyeSwgbG9hZFN0YXRpc3Rp
Y3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0cmFibGVEb21haW5JRC52
YWx1ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlJiBtZW1vcnlTdG9yZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICghaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5z
YWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8m
IHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRhKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCi0gICAgLy8gY2FuIHJlZmVyIHRvIHRo
ZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMg
OiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKHN0YXRpc3RpYyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVu
dC0+Y29sdW1uVGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4KTsKLSAgICBhdXRvIGN1cnJlbnRM
YXN0U2VlbiA9IGN1cnJlbnQtPmNvbHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKLSAgICBhdXRv
IGN1cnJlbnRNb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gY3VycmVudC0+Y29sdW1uRG91Ymxl
KE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgpOwotICAgIGJvb2wgY3VycmVudEdy
YW5kZmF0aGVyZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KTsKLSAg
ICBib29sIGN1cnJlbnRJc1ByZXZhbGVudCA9IGN1cnJlbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KTsKLSAgICBib29sIGN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpOwotICAgIHVuc2lnbmVkIGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgp
OwotICAgIGJvb2wgY3VycmVudElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwg
PSBjdXJyZW50LT5jb2x1bW5JbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bEluZGV4KTsKLQotICAgIEFTU0VSVChjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPT0gb3RoZXIu
cmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOwotCi0gICAgaWYgKFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhjdXJyZW50TGFzdFNlZW4pIDwgb3RoZXIubGFzdFNlZW4pCi0gICAgICAgIHVwZGF0
ZUxhc3RTZWVuKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCBvdGhlci5sYXN0U2Vlbik7Ci0KLSAg
ICBpZiAoIW90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICAvLyBJZiBtb3N0IHJl
Y2VudCB1c2VyIGludGVyYWN0aW9uIHRpbWUgaGFzIGJlZW4gcmVzZXQgZG8gc28gaGVyZSB0b28u
Ci0gICAgICAgIGlmICghb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVnaXN0cmFibGVEb21haW4sIGZhbHNl
LCB7IH0pOwotICAgIH0gZWxzZQotICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVn
aXN0cmFibGVEb21haW4sIHRydWUsIHN0ZDo6bWF4KFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhj
dXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIG90aGVyLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKSk7Ci0KLSAgICBpZiAob3RoZXIuZ3JhbmRmYXRoZXJlZCAmJiAhY3VycmVu
dEdyYW5kZmF0aGVyZWQpCi0gICAgICAgIHNldEdyYW5kZmF0aGVyZWQob3RoZXIucmVnaXN0cmFi
bGVEb21haW4sIHRydWUpOwotICAgIGlmIChvdGhlci5pc1ByZXZhbGVudFJlc291cmNlICYmICFj
dXJyZW50SXNQcmV2YWxlbnQpCi0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBpZiAob3RoZXIuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQpCi0gICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgaWYgKG90aGVyLmRhdGFSZWNvcmRz
UmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVjb3Jkc1JlbW92ZWQpCi0gICAgICAgIHVwZGF0ZURhdGFS
ZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNS
ZW1vdmVkKTsKLSAgICBpZiAob3RoZXIuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVz
b3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQot
ICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgc3RhdGlzdGljKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0g
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAibWVyZ2VTdGF0aXN0aWMiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptZXJnZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMg
bm90IGZvdW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQo
KSwgc3RhdGlzdGljKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0
YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0
YXRpc3RpY3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbikpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW5z
ZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzIGlu
c2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0
aXN0aWMoc3RhdGlzdGljKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBm
b3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28gd2UKLSAgICAvLyBjYW4gcmVmZXIgdG8g
dGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMuCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0
aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRp
c3RpYyk7Ci19Ci0KLXN0YXRpYyBBU0NJSUxpdGVyYWwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0
aW5nKCkKLXsKLSAgICByZXR1cm4gIlNFTEVDVCBkb21haW5JRCwiCi0gICAgICAgICIoY291bnRT
dWJGcmFtZVVuZGVyVG9wRnJhbWUgKyBjb3VudFN1YlJlc291cmNlVW5kZXJUb3BGcmFtZSArIGNv
dW50VW5pcXVlUmVkaXJlY3RUbykgYXMgc3VtICAiCi0gICAgICAgICJGUk9NICggIgotICAgICAg
ICAiU0VMRUNUICIKLSAgICAgICAgICAgICJkb21haW5JRCwgIgotICAgICAgICAgICAgIkNPVU5U
KERJU1RJTkNUIGYudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJGcmFtZVVuZGVyVG9wRnJh
bWUsICIKLSAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCByLnRvcEZyYW1lRG9tYWluSUQpIGFz
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lLCAiCi0gICAgICAgICAgICAiQ09VTlQoRElT
VElOQ1QgdG9Eb21haW5JRCkgYXMgY291bnRVbmlxdWVSZWRpcmVjdFRvICIKLSAgICAgICAgIkZS
T00gIgotICAgICAgICAiT2JzZXJ2ZWREb21haW5zIG8gIgotICAgICAgICAiTEVGVCBKT0lOIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgZiBPTiBvLmRvbWFpbklEID0gZi5zdWJGcmFtZURv
bWFpbklEICIKLSAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zIHIgT04gby5kb21haW5JRCA9IHIuc3VicmVzb3VyY2VEb21haW5JRCAiCi0gICAgICAgICJM
RUZUIEpPSU4gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB1IE9OIG8uZG9tYWluSUQgPSB1
LnN1YnJlc291cmNlRG9tYWluSUQgIgotICAgICAgICAiV0hFUkUgaXNQcmV2YWxlbnQgTElLRSA/
ICIKLSAgICAgICAgImFuZCBoYWRVc2VySW50ZXJhY3Rpb24gTElLRSA/ICIKLSAgICAgICAgIkdS
T1VQIEJZIGRvbWFpbklEKSBPUkRFUiBCWSBzdW0gREVTQzsiX3M7Ci19Ci0KLVZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJz
dFBhcnR5PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21h
aW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4pIGNvbnN0Ci17
Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRB
bGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRBbGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5R
dWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7
Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGlyZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFp
bklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IHRoaXJkUGFydHlEYXRhRm9y
U3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBh
cnR5RG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3Ry
YWJsZURvbWFpblN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQobV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpKTsKLSAgICAgICAgdGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zLmFwcGVuZElmTm90Q29udGFpbnMoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eSB7IGZpcnN0UGFydHlEb21haW4sIGhhc1N0b3JhZ2VBY2Nlc3MoZmlyc3RQYXJ0eURvbWFp
biwgdGhpcmRQYXJ0eURvbWFpbiksIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAodGhp
cmRQYXJ0eURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbikgfSk7Ci0gICAgfQotICAgIHJldHVybiB0
aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7Ci19Ci0KLXN0YXRpYyBi
b29sIGhhc0JlZW5UaGlyZFBhcnR5KHVuc2lnbmVkIHRpbWVzVW5kZXJGaXJzdFBhcnR5KQotewot
ICAgIHJldHVybiB0aW1lc1VuZGVyRmlyc3RQYXJ0eSA+IDA7Ci19Ci0KLVZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7
Ci0gICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpB
bGwgPyAiJSIgOiAiMSI7Ci0gICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKTsKLSAgICBpZiAo
IXNvcnRlZFN0YXRpc3RpY3MKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQo
MSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRp
c3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwotICAgIH0KLSAgICB3
aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkpIHsK
LSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy0+
Y29sdW1uSW50KDApOwotICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVnaXN0
cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhn
ZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7Ci0gICAgICAg
ICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5RGF0
YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGlyZFBh
cnR5RG9tYWluKSB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGhpcmRQYXJ0eURh
dGFMaXN0OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJl
Y29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0
aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNp
Z25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4g
UmV0dXJuaW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci0gICAgfQot
ICAgIAotICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIFN0ZFNldDx1bnNpZ25l
ZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3Mp
OwotICAgIGlmICghZmluZFN1YnJlc291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50
KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmNvbHVtbkludCgwKTsKLSAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbklEKTsKLSAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCi0gICAgICAgICAgICBu
ZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Ci0gICAgfQotCi0gICAg
YXV0byBmaW5kVG9wRnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMCJfcyk7Ci0gICAgaWYgKCFmaW5kVG9wRnJhbWVzCi0gICAgICAgIHx8IGZpbmRUb3BGcmFt
ZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Y29sdW1uSW50KDApOwotICAgICAgICBh
dXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQo
bmV3RG9tYWluSUQpOwotICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKLSAgICAgICAg
ICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKLSAgICB9Ci0K
LSAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5
SWRlbnRpZmllZERvbWFpbnMpCi0gICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4o
ZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNp
dmVDYWxscyk7Ci0KLSAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAg
IGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Vi
cmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgIH0KLQotICAgIGF1dG8g
dG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQg
RlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50
RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKLSAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0
ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8dW5zaWduZWQsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsK
LSAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlz
UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAi
X3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7Ci0gICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1u
VGV4dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOwotICAgICAgICAgICAgcmVz
dWx0cy5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBh
dXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOwotCi0g
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAgICAgICAgICAgIGlmICgh
ZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9
IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0g
ICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAg
ICAgICAgICAgIGlmICghZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52
YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5J
bnQoMSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFp
bklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21h
aW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21h
aW5JRCIpKTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVt
ZW50KSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZG9t
YWluSUQpOwotICAgICAgICAgICAgaWYgKCFkb21haW5JRCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQtPmNvbHVtbkludCgxKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQg
SU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikp
OwotICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7Ci0gICAgICAg
ICAgICBpZiAoIWRvbWFpbklEKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwotICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gbm90VmVyeVByZXZhbGVu
dFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7Ci0gICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
IG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNl
KHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwg
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNv
dXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0
aWMucHJldmFsZW5jZSk7Ci0gICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3Rh
dGlzdGljLnByZXZhbGVuY2UpCi0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgbWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKLSAgICByZWNsYXNzaWZ5UmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJ1
bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1l
RG9tYWluJiBzdWJGcmFtZURvbWFpbikgY29uc3QKLXsKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQs
IHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOwotICAgIHJl
dHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFt
ZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4p
OwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAo
Y29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKLSAgICBjYXNl
IENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25D
b29raWVQb2xpY3k6Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4s
IFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29va2llQWNjZXNzOjpP
bmx5SWZHcmFudGVkOgotICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgotICAgICAgICBicmVhazsK
LSAgICB9OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
c3RvcmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQs
IHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVI
YW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBw
YWdlSUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3Rp
Y3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7Ci0gICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoY29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURv
bWFpbikpIHsKLSAgICBjYXNlIENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oSVRQRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIg
UFJJVkFURV9MT0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlv
biBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltJVFBdIENhbm5v
dCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwg
Iicgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
X3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNz
U3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OgotICAgICAgICBpZiAoVU5MSUtFTFko
ZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkg
c3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBmcm9tIHNldHRpbmcgY29va2llcy4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZl
bDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgc2luY2UgaXRzIGNvb2tpZXMg
YXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVu
ZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkgc3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBm
cm9tIHNldHRpbmcgY29va2llcy4iX3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRs
ZWQgYmVsb3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGF1dG8gdXNlcldhc1Byb21w
dGVkRWFybGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOwotICAgIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8pIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0
aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBB
Ym91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBh
Y2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVyICciX3MsIHRv
cEZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBvciBub3QuIl9zKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJv
bXB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKElUUERlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJSIgUFJJ
VkFURV9MT0dfU1RSSU5HICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltJVFBdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICciX3MsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLCAiJyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicuIl9z
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRv
bWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCi0gICAgICAg
IHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNl
Y29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29w
ZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKLXsK
LSAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKLSAgICB9Ci0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFp
biYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0
b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmIChwcm9tcHRXYXNTaG93biA9PSBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewotICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVE
b21haW4pOwotICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgewotICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOwotICAgIH0KLQotICAgIGdyYW50
U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21h
aW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVy
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1l
RG9tYWluKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkOjpZZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByb21wdFdhc1No
b3duTm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0g
ICAgICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
LSAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSA9PSBTdG9yYWdlQWNjZXNz
UHJvbXB0V2FzU2hvd246Olllcyk7Ci0jZW5kaWYKLSAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KHN1YkZyYW1lRG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHNjb3BlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVE
b21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHNjb3BlLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RvcmVdKFN0b3JhZ2VBY2Nl
c3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3YXNHcmFudGVkLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlu
cyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLVZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURv
bWFpbnNUb0Jsb2NrOwotICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDIpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7
Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBw
ZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7Ci0KLSAgICBpZiAoIWRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOwotICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
Ci0gICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKLQotICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAl
IiBQUklWQVRFX0xPR19TVFJJTkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIERpZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpLnN0cmluZygpLCAiJyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iX3MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkLCBi
b29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1l
U2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKLSAgICBib29sIGFyZVRhcmdl
dEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47
Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKLSAgICAgICAgYXV0byB0YXJn
ZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
YXJnZXREb21haW4pOwotICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKLSAgICAg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBkb21haW4iLCB0
aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVMYXN0
U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwot
ICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7Ci0gICAgICAgIGlmIChpc01haW5G
cmFtZSkgewotICAgICAgICAgICAgYm9vbCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gIXdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyICYmIGRl
bGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQgPCBwYXJhbWV0ZXJzKCkubWluRGVsYXlBZnRl
ck1haW5GcmFtZURvY3VtZW50TG9hZFRvTm90QmVBUmVkaXJlY3Q7Ci0gICAgICAgICAgICBpZiAo
aXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVy
YWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFp
bik7Ci0gICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAgICAgICAg
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9
KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0p
LCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xP
R19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xP
R19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVz
c2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3Ry
aW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9t
YWluLnN0cmluZygpLCAiJy4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKLSAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwotICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAg
ICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dC5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFt
ZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCBvZiB0YXJnZXQgb3IgcmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0
aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQp
OwotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxl
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBO
YXZpZ2F0ZWRUb0RvbWFpbiYgdG9Eb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKGZyb21Eb21haW4gIT0gdG9Eb21haW4pOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odG9Eb21haW4pOwotICAgIGlmICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAg
Ci0gICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCi0gICAgICAgIHNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0K
LSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBX
SEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+
YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVy
YWN0aW9uKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
c2V0VXNlckludGVyYWN0aW9uIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFj
dGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBib29sIGRpZEhhdmVQcmV2
aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJh
dGluZ0RhdGVzV2luZG93OjpMb25nKTsKLSAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0
cnVlLCBXYWxsVGltZTo6bm93KCkpOwotCi0gICAgaWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRVc2VySW50
ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKLQotICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYg
KCFyZW1vdmVTdG9yYWdlQWNjZXNzCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJp
bmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQotICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
Ci0gICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KLSAgICB1cGRhdGVDb29raWVCbG9ja2lu
ZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dp
bmRvdykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSwgImhhc0hhZFVzZXJJbnRlcmFj
dGlvbiJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsKLQotICAgIGlm
IChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpKSB7Ci0gICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgotICAgICAgICAvLyBTZXQgdGltZXN0
YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdwotICAgICAgICAvLyBp
dCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgotICAgICAgICBj
bGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7Ci0gICAgICAgIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
LQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7Ci0gICAg
aWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlIGRvbWFpbklEIHNob3VsZCBleGlzdCBidXQgd2FzIG5vdCBm
b3VuZC4iLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQsIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnksICJzZXRQcmV2YWxlbnRSZXNv
dXJjZSJfcyk7Ci0gICAgaWYgKCFzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dAotICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZEludCgxLCAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQs
IHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2Ug
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlIl9zKTsKLSAgICBpZiAobmV3UHJldmFsZW5jZSA9
PSBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCkgewotICAgICAgICBpZiAoIXNjb3Bl
ZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudAotICAgICAgICAgICAgfHwgc2Nv
cGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7Ci0gICAgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJsZURvbWFpbklELCBu
b25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOwotICAgIHNldERvbWFpbnNBc1ByZXZh
bGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxl
bnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoZG9t
YWlucyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmIChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7Ci0gICAgICAgIG1fZGF0
YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRl
bWVudCwgZ2V0QWxsRG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gZG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50
LT5jb2x1bW5UZXh0KDApKTsKLSAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5z
LmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6
XG5cbiIpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgcmVzb3Vy
Y2VUb1N0cmluZyhyZXN1bHQsIGRvbWFpbik7Ci0KLSAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0g
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOwotICAgICAg
ICBmb3IgKGF1dG8gdGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOwotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQudG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlJiBwcmVkaWNhdGVTdGF0ZW1lbnQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoIXByZWRpY2F0ZVN0YXRlbWVudAotICAgICAgICB8fCBwcmVkaWNhdGVT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgaXNQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJuIHByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzVmVyeVByZXZhbGVu
dFJlc291cmNlUXVlcnksICJpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlz
dHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAi
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIl9zKTsKLSAgICByZXR1cm4gcmVsYXRpb25z
aGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0
b3BGcmFtZURvbWFpbik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOwotICAgIHJldHVybiBy
ZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSwgImlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyJfcyk7Ci0gICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhzY29wZWRTdGF0ZW1lbnQs
IGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFs
ZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGF1dG8gc2NvcGVk
U3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSJfcyk7Ci0gICAgCi0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZh
bHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFu
c2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlR3Jh
bmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0R3JhbmRm
YXRoZXJlZCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbiwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxRdWVyeSwgInNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi1TZWNvbmRzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4p
OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5J
RCh0b3BGcmFtZURvbWFpbik7Ci0KLSAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZy
YW1lRG9tYWluSUQpCi0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCB9OwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVz
dGFtcFN0YXRlbWVudCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0
TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIs
ICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDYsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLSAgICB9Ci0gICAgaWYgKHNj
b3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLQot
ICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMCkgfTsK
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgaXNHcmFuZGZh
dGhlcmVkUXVlcnksICJpc0dyYW5kZmF0aGVyZWQiX3MpOwotICAgIHJldHVybiBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBt
YWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFt
ZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNv
bmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGb3IgY29uc2lzdGVu
Y3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9w
IGZyYW1lIGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9t
YWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9
KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi1zdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKLSAgICAgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQKLSAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCAwIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9t
YWluKTsKLSAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKG5ld09ic2VydmF0
aW9uKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgc3Rk
OjpudWxsb3B0IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9t
YWluSUQoZG9tYWluKS52YWx1ZSgpIH07Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCi17Ci0gICAgbV9kYXRhYmFz
ZS5jbGVhckFsbFRhYmxlcygpOwotCi0gICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJEYXRhYmFzZUNvbnRlbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKLXsKLSAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4p
OwotICAgIGlmICghZG9tYWluSURUb1JlbW92ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxs
RGF0YVN0YXRlbWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsRG9t
YWlucygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERvbWFp
bnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImFsbERvbWFpbnMiX3MpOwotICAgIGlm
ICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBkb21haW5zOwotICAgIHdoaWxlIChzY29wZWRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBkb21haW5zLmFwcGVuZChSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNjb3BlZFN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotICAgIHJldHVybiBkb21haW5zOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKLSAgICBjbGVhck9w
ZXJhdGluZ0RhdGVzKCk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIHJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLQotICAgIGF1
dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwgeyB9IH07Ci0gICAgdXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcmVB
bGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pCi17Ci0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9
PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAh
aGFzSGFkVXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRv
dzo6TG9uZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1Db29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tp
ZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpOwotICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21haW4uc3RyaW5n
KCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
LQotICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKLSAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKLQotICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OwotCi0gICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKLX0K
LQotU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFy
dHlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZp
cnN0UGFydHlEb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87Ci0gICAgfQot
Ci0gICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gKnJlc3VsdC5zZWNvbmQ7Ci0K
LSAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRv
bWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghc3RhdGVt
ZW50Ci0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOwotCi0gICAgcmV0dXJuICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPyBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93
bjo6Tm87Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAwIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
IHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJf
cyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIAot
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLUhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00g
KFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVs
RG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElO
TkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5k
b21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04g
ZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVt
blRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8gZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yKCk7Ci0gICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBD
b29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOwotICAg
IGF1dG8gZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpOwotICAgIGF1dG8gZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzID0gdGhpcy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7Ci0KLSAg
ICBpZiAoZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbkFzRmlyc3RQYXJ0eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNj
ZXNzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ig
ZG9tYWluc1RvQmxvY2sgeyBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5LCBkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgfTsKLQotICAgIGlmIChkZWJ1Z0xv
Z2dpbmdFbmFibGVkKCkgJiYgKCFkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNF
bXB0eSgpIHx8ICFkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCi0g
ICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFj
a2luZyByZXN0cmljdGlvbnMiLCBkb21haW5zVG9CbG9jayk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VS
ZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxv
Y2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIHN0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkod2Vha1RoaXMtPmRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0
ZSB0cmFja2luZyByZXN0cmljdGlvbnMuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5kZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sICJbSVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tp
bmcgcmVzdHJpY3Rpb25zLiJfcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1WZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpkb21haW5zKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAKLSAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKLSAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdp
c3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRl
cmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQg
Sk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9t
YWluSUQgPSBkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVy
biByZXN1bHRzOwotICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Y29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29s
dW1uVGV4dCgxKSkKLSAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDIpKQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/
IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVt
ZW50LT5jb2x1bW5JbnQoNikpCi0gICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWluSURzVG9DbGVhcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChkb21haW5JRHNU
b0NsZWFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaXN0VG9DbGVh
ciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKLQotICAgIGF1dG8gY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoIWNsZWFyR3JhbmRm
YXRoZXJpbmdTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVW5leHBp
cmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRhdGEmIHJlc291cmNlU3RhdGlz
dGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLXsKLSAgICBp
ZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NF
eHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBv
cGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKLQotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0
aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCi0gICAgICAgIGlmIChvcGVyYXRpbmdE
YXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykKLSAgICAgICAgICAgIGNs
ZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBb
XSB7IH0pOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
b3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1ib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihj
b25zdCBEb21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nKQotewotICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3Rp
Yy5ncmFuZGZhdGhlcmVkKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiBy
ZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKQotewot
ICAgIGJvb2wgaXNSZW1vdmFsRW5hYmxlZCA9IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlKCkgIT0gRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmUgfHwgcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKLSAgICBi
b29sIGlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkID0gc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkOwotCi0gICAgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cgd2luZG93IHsgfTsKLSAgICBzd2l0Y2ggKGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKCkpIHsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOgotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOgotICAgICAgICB3aW5kb3cgPSBPcGVyYXRp
bmdEYXRlc1dpbmRvdzo6U2hvcnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXNMaXZlT25UZXN0aW5nVGltZW91
dDoKLSAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rp
bmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXNSZXByb1Rlc3RpbmdUaW1lb3V0OgotICAgICAgICB3aW5kb3cg
PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yUmVwcm9UZXN0aW5nOwotICAgIH0KLQotICAgIHJl
dHVybiBpc1JlbW92YWxFbmFibGVkICYmICFpc1Jlc291cmNlR3JhbmRmYXRoZXJlZCAmJiAhaGFz
SGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCB3aW5k
b3cpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91
bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKLXsKLSAgICBpZiAoKCFpc1NhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0
cmljdEZvclNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWlu
KSkKLSAgICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VT
dGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChyZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0
c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKLSAgICAgICAgY2xlYXJUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3Rh
dGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0aWMpCi17Ci0gICAgaWYgKHN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiBz
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7Ci19Ci0KLVJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RX
ZWJzaXRlRGF0YUZvcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKCkgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcp
Ci0gICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwotCi0gICAgYXV0
byBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgYXV0byBvbGRlc3RVc2VySW50ZXJhY3Rpb24g
PSBub3c7Ci0gICAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgdG9EZWxldGVPclJlc3RyaWN0Rm9yOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBWZWN0b3I8RG9tYWluRGF0
YT4gZG9tYWlucyA9IHRoaXMtPmRvbWFpbnMoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFp
bklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IGRv
bWFpbnMpIHsKLSAgICAgICAgaWYgKHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9u
KHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB0aGlzLT5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZShzdGF0aXN0aWMpKQotICAgICAgICAgICAgb2xkZXN0
VXNlckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0VXNlckludGVyYWN0aW9uLCAqbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsV2Vi
c2l0ZURhdGFGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewot
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENvb2tp
ZXNGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgICAgICB0
b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURh
dGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihzdGF0aXN0
aWMsIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgdG9E
ZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgICAg
IHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKLSAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0Vu
YWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIlNjaGVkdWxlZCAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHRvIGhhdmUgaXRzIGNvb2tpZXMg
c2V0IHRvIFNhbWVTaXRlPXN0cmljdC4iLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5m
bywgbWFrZVN0cmluZygiU2NoZWR1bGVkICciLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4u
c3RyaW5nKCksICInIHRvIGhhdmUgaXRzIGNvb2tpZXMgc2V0IHRvIFNhbWVTaXRlPXN0cmljdCcu
IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkKLSAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZy5hcHBlbmQoc3Rh
dGlzdGljLmRvbWFpbklEKTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0
aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUg
d2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93
IC0gb2xkZXN0VXNlckludGVyYWN0aW9uIDwgcGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCkKLSAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNsZWFyKCk7Ci0KLSAgICBjbGVh
ckdyYW5kZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSAwOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5
LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgIGNvdW50ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCk7Ci0KLSAgICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRy
aWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50
cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOwotCi0gICAg
c2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJp
ZXNEb3duVG87Ci0gICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwotCi0gICAgYXV0byByZWNv
cmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2
YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwotICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwg
cmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAg
ICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBl
bnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7Ci0KLSAg
ICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKLQotICAgIGF1
dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRhdGVM
YXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVt
ZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldExhc3RTZWVuIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB1
cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNl
Y29uZHMoKSkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAo
ZG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFByZXZhbGVudFJl
c291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCwgdXBk
YXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnksICJ1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQotewot
ICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChj
b3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwotICAgIAotICAgIGlmICghc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJp
bmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5j
b2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Y29sdW1u
SW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Y29sdW1uSW50KDAp
ID09IDEpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKLXsKLSAgICBidWlsZGVyLmFw
cGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlllcyIgOiAiTm8iKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0
cmluZyYgZW50cnkpCi17Ci0gICAgYnVpbGRlci5hcHBlbmQoIiAgICAgICAgIiwgZW50cnksICdc
bicpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURT
dGF0ZW1lbnQsIGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQuIFN0
YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgIHJlc3VsdCA9IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50LT5jb2x1bW5U
ZXh0KDApOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFTQ0lJTGl0ZXJhbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAotewotICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiAiU0VM
RUNUIHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKLSAg
ICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKLSAgICBpZiAodGFibGVOYW1l
ID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gIlNFTEVD
VCBmcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9E
b21haW5JRCA9ID8iX3M7Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGly
ZFBhcnR5U2NyaXB0cyIpCi0gICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWlu
SUQgZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9t
YWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMiKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20g
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJf
czsKLSAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IikKLSAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCi0g
ICAgICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJs
ZU5hbWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCi0gICAgICAgIHJldHVy
biAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKLSAgICAKLSAgICByZXR1cm4gIiJf
czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5k
U3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgYXV0byBxdWVyeSA9
IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5hbWUpOwotICAgIAotICAgIGlmICghcXVl
cnkubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIGRhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwotICAgIAotICAgIGlmICghZGF0YSB8fCBk
YXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxl
ZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChkYXRhLT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKCIgICAgIiwgdGFibGVOYW1lLCAiOlxuIik7Ci0gICAgCi0gICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Y29sdW1uSW50KDApKTsKLSAgICBh
cHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKLSAgICAKLSAgICB3aGlsZSAoZGF0YS0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEKGRhdGEtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgIGFwcGVuZE5leHRFbnRy
eShidWlsZGVyLCByZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaGFzSGFkUmVjZW50
VXNlckludGVyYWN0aW9uKFdURjo6U2Vjb25kcyBpbnRlcmFjdGlvblRpbWVTZWNvbmRzKQotewot
ICAgIHJldHVybiBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAy
NF9oOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNv
dXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KSBjb25zdAotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LCBnZXRSZXNvdXJjZURh
dGFCeURvbWFpbk5hbWVRdWVyeSwgInJlc291cmNlVG9TdHJpbmciX3MpOwotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9t
YWluKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNvdXJjZVRvU3Ry
aW5nLiBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwg
ZG9tYWluLCAnXG4nKTsKLSAgICAKLSAgICAvLyBVc2VyIGludGVyYWN0aW9uCi0gICAgYXBwZW5k
Qm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFC
eURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbjogIik7Ci0gICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRl
cmFjdGlvbihTZWNvbmRzKG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIndpdGhpbiAyNCBob3VycyIpOwotICAgIGVsc2UKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIi0xIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYXBw
ZW5kQm9vbGVhbihidWlsZGVyLCAiZ3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlE
b21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7Ci0gICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0KLSAgICAvLyBTdG9yYWdlIGFjY2VzcwotICAgIGFwcGVu
ZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyIsIGRvbWFpbik7Ci0KLSAgICAvLyBUb3AgZnJhbWUgc3RhdHMKLSAgICBhcHBlbmRTdWJT
dGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWlu
KTsKLSAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKLSAgICBh
cHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSIsIGRvbWFpbik7Ci0gICAgYXBwZW5kU3ViU3RhdGlzdGlj
TGlzdChidWlsZGVyLCAiVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7
Ci0KLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNv
bHVtbkludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLQotICAgIC8vIFN1YmZyYW1lIHN0YXRzCi0gICAgYXBw
ZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyIsIGRvbWFpbik7Ci0KLSAgICAvLyBTdWJyZXNvdXJjZSBzdGF0cwotICAgIGFwcGVuZFN1YlN0
YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBk
b21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qo
YnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7Ci0KLSAg
ICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UKLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1By
ZXZhbGVudFJlc291cmNlIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChJc1ByZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBt
X2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYnVpbGRlci5h
cHBlbmQoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21h
aW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKLXsK
LSAgICBhdXRvIHNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQsIGxpbmtEZWNvcmF0
aW9uRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UiX3MpOwotICAgIGF1dG8g
c2NvcGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudCht
X3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQsIHNjcmlwdExvYWRFeGlzdHNRdWVyeSwgImRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZSBsaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCJfcyk7Ci0g
ICAgYXV0byBzY29wZWRTdWJGcmFtZUV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRl
bWVudChtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LCBzdWJGcmFtZUV4aXN0c1F1ZXJ5LCAiZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlIHN1YkZyYW1lRXhpc3RzU3RhdGVtZW50Il9zKTsKLSAgICBh
dXRvIHNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQsIHN1YlJlc291cmNlRXhpc3RzUXVlcnks
ICJkb21haW5JREV4aXN0c0luRGF0YWJhc2Ugc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQiX3Mp
OwotICAgIGF1dG8gc2NvcGVkVW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCwgdW5pcXVlUmVk
aXJlY3RFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSB1bmlxdWVSZWRpcmVj
dEV4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgYXV0byBzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQsIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJ
bkRhdGFiYXNlIG9ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgCi0gICAg
aWYgKCFzY29wZWRMaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2Nv
cGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2NvcGVkU3ViRnJhbWVF
eGlzdHNTdGF0ZW1lbnQKLSAgICAgICAgfHwgIXNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVt
ZW50Ci0gICAgICAgIHx8ICFzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudAotICAg
ICAgICB8fCAhc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Ci0gICAgICAgIHx8
IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50LT5i
aW5kSW50KDIsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zY3JpcHRMb2Fk
RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgbV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+YmluZElu
dCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fc3ViRnJhbWVFeGlzdHNT
dGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBt
X3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+YmluZEludCgy
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fdW5pcXVlUmVkaXJlY3RFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4
aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV91bmlxdWVS
ZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwg
bV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc2NyaXB0TG9hZEV4aXN0
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkg
fHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fb2Jz
ZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycygpCi17Ci0gICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOwotICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKLSAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKLQotICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKLQotICAgIGlmICghZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0
ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRp
bmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOwotCi0gICAgaWYg
KCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGgg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJh
dGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9y
dCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBv
ciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNT
aXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCi0gICAgICAgIG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlmIChnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQo
KSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+Y29sdW1uSW50KDIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRv
IHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAobV9vcGVyYXRpbmdEYXRl
c1NpemUgPiAwKSB7Ci0gICAgICAgIGlmICh0b2RheSA8PSBtX21vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0gICAgaW50IHJvd3NUb1By
dW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAx
OwotICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKLSAgICAgICAgYXV0byBkZWxldGVMZWFzdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERh
eSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1
ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGF1
dG8gaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwg
bW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0
b2RheS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycygpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBzd2l0Y2gg
KG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6
TG9uZzoKLSAgICAgICAgaWYgKG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xv
bmdXaW5kb3dPcGVyYXRpbmdEYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgotICAgICAgICBp
ZiAobV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxU
aW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0
aW5nRGF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOgotICAgICAgICByZXR1
cm4gV2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVy
YXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZzsKLSAgICBjYXNlIE9wZXJhdGluZ0RhdGVz
V2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQg
c3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rp
b24gKG1haW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCi17Ci0gICAgLy8gUG9wdWxhdGUgdGhl
IE9wZXJhdGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmlu
Zy4KLSAgICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKLSAg
ICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSku
dmFsdWUoKTsKLSAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKLSAgICAgICAgYXV0byBk
YXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsKLQotICAgICAgICBhdXRvIGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBP
UiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxF
Q1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0
byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQo
KTsKLSAgICB9Ci0KLSAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3Qg
cmVjZW50IG9mIGFsbCBlbnRyaWVzLgotICAgIGRheXNBZ29JblNlY29uZHMgLT0gU2Vjb25kczo6
ZnJvbUhvdXJzKDI0KS52YWx1ZSgpOwotICAgIGF1dG8gc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21h
aW5TdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudCwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nIl9zKTsKLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRUZXh0KFJlZ2lzdHJhYmxlRG9tYWluSW5kZXgsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kRG91YmxlKExhc3RTZWVuSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgaGFzVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCwgZGF5c0Fnb0lu
U2Vjb25kcykgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KEdyYW5kZmF0aGVyZWRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChJc1ByZXZhbGVudEluZGV4LCBpc1ByZXZhbGVudCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCAwKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCogc3RhdGVtZW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byBzb3VyY2VTaXRlRG9tYWluID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDApKTsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChz
dGF0ZW1lbnQtPmNvbHVtbkludCgxKSk7Ci0gICAgYXV0byBzb3VyY2VJRCA9IHN0YXRlbWVudC0+
Y29sdW1uSW50KDIpOwotICAgIGF1dG8gdGltZU9mQWRDbGljayA9IGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0
YXRlbWVudC0+Y29sdW1uRG91YmxlKDUpIDogc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMyk7Ci0g
ICAgYXV0byB0b2tlbiA9IGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg3KSA6
IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg0KTsKLSAgICBhdXRvIHNpZ25hdHVyZSA9IGF0dHJpYnV0
aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg4KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg1
KTsKLSAgICBhdXRvIGtleUlEID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0
KDkpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDYpOwotCi0gICAgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgYXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZUlEKHNvdXJjZUlEKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzb3VyY2VTaXRlRG9tYWluKSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZShSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGRlc3RpbmF0aW9uU2l0ZURvbWFp
bikpLCB7IH0sIHsgfSwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWVPZkFkQ2xpY2spKTsK
LSAgICAKLSAgICBpZiAoYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRpb25U
cmlnZ2VyRGF0YSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpOwotICAgICAgICBhdXRvIHByaW9y
aXR5ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoNCk7Ci0gICAgICAgIGF1dG8gc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg2KTsKLSAgICAgICAg
YXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMTApOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0x
KQotICAgICAgICAgICAgYXR0cmlidXRpb24uc2V0QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgeyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXR0cmlidXRpb25UcmlnZ2VyRGF0YSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpQcmlvcml0eShwcmlvcml0eSkgfSk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25h
bDxXYWxsVGltZT4gc291cmNlRWFybGllc3RUaW1lVG9TZW5kOwotICAgICAgICBzdGQ6Om9wdGlv
bmFsPFdhbGxUaW1lPiBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZDsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJl
ZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgICAgICBpZiAoc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCi0gICAgICAgICAgICBzb3VyY2VFYXJsaWVzdFRpbWVU
b1NlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
VmFsdWUpOwotCi0gICAgICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVl
ID4gMC4wKQotICAgICAgICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7
Ci0KLSAgICAgICAgYXR0cmlidXRpb24uc2V0VGltZXNUb1NlbmQoeyBzb3VyY2VFYXJsaWVzdFRp
bWVUb1NlbmQsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIH0pOwotICAgIH0KLQotICAg
IGF0dHJpYnV0aW9uLnNldFNvdXJjZVNlY3JldFRva2VuKHsgdG9rZW4sIHNpZ25hdHVyZSwga2V5
SUQgfSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRpb247Ci19Ci0KLXN0ZDo6cGFpcjxzdGQ6Om9w
dGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25h
bDxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNv
cmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25z
dCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlv
blNpdGUmIGRlc3RpbmF0aW9uU2l0ZSkKLXsKLSAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKHNvdXJjZVNpdGUucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVE
b21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBz
dGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmlu
ZFVuYXR0cmlidXRlZFF1ZXJ5LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKLSAg
ICBpZiAoIWZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZFVu
YXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
ZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0ZW1lbnQsIGZp
bmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotICAg
IGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZEF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBmaW5kQXR0
cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50PiB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDsKLSAgICBpZiAo
ZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6VW5hdHRy
aWJ1dGVkKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50PiBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci0gICAgaWYgKGZpbmRB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEZyb21EYXRhYmFzZShmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50LCBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1
dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3Ry
YWJsZURvbWFpbik7Ci0KLSAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25kIHx8ICFhdHRyaWJ1dGlv
bkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNv
dXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigp
OwotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdn
ZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0cmlidXRp
b24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6IC0xOwotICAgICAgICBh
dXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0
cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkucHJpb3JpdHkgOiAtMTsK
LSAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1l
c1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJpYnV0aW9uLnRpbWVzVG9T
ZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpIDogLTE7Ci0gICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6IC0xOwotCi0gICAgICAg
IC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNs
aWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVw
b3J0IHRpbWVzLgotICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0x
ICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKLQotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50Ci0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmli
dXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0LCBhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg5LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQKLSAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRh
dGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMs
IGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJs
ZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBbGxV
bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQot
ewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0
VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNl
dFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
Il9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
bGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3Rpbmcs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlVW5hdHRy
aWJ1dGVkKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1dGlvbikKLXsKLSAgICBhdXRv
IHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5y
ZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRv
bWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsK
LQotICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5J
RCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50LCByZW1vdmVV
bmF0dHJpYnV0ZWRRdWVyeSwgInJlbW92ZVVuYXR0cmlidXRlZCJfcyk7Ci0KLSAgICBpZiAoIXNj
b3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25h
bDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVD
bGlja01lYXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEmJiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgY2xlYXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxp
bmcgYW4gYXR0cmlidXRpb24uCi0gICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoKTsKLQotICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBh
dHRyaWJ1dGlvbi4iKTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRp
b24uIl9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LQotICAgIGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKLSAgICBhdXRv
IHByaW9yaXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKLQotICAgIGlmIChV
TkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8o
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIs
IGRhdGEsIHByaW9yaXR5KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZv
LCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJp
b3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKLSAgICB9Ci0KLSAgICBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50
aWxTZW5kIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIGF1dG8gYXR0cmli
dXRpb24gPSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRp
b25TaXRlKTsKLSAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24u
Zmlyc3Q7Ci0gICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNv
bmQ7Ci0KLSAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgewotICAgICAgICAvLyBBbHdh
eXMgY29udmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhl
IHVuYXR0cmlidXRlZCBtYXAuCi0gICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNs
eVVuYXR0cmlidXRlZCk7Ci0gICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5h
dHRyaWJ1dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1v
dmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkpOwotCi0gICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgaGF2ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVu
YXR0cmlidXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1
dGlvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LgotICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNl
bmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVy
dGVkIGEgc3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7Ci0gICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBh
dHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJf
cywgcHJpb3JpdHksICInLiJfcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhp
Z2hlciBwcmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCi0gICAgICAgIGlmICgh
cHJldmlvdXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhh
c0hpZ2hlclByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7Ci0gICAgICAgICAg
ICBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRy
aWJ1dGVkKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0
ZWQpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgewot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQs
ICJSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25l
IHdpdGggYXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGlj
fXUgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKLSAg
ICAgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVy
dGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNl
IGl0IGhhZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVz
cGVjdCB0aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKLSAgICAg
ICAgLy8gbm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0
LgotICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNs
eUJlZW5SZXBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBw
cmV2aW91c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRv
U2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKLSAgICAgICAgICAgIGlmICgh
c2Vjb25kc1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgICAgICBpbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKLQotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVk
IGFuIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAle3B1YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdo
ZXIgcHJpb3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3Vy
ZW1lbnRdIFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBw
cmlvcml0eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5o
YXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOwotfQotCi1WZWN0b3I8V2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKQotewotICAgIGF1
dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2Fs
bEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRv
U3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW4pCi17Ci0gICAgLy8g
RGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBpZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgot
ICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUiOwotICAgIGlmIChkb21haW4pIHsKLSAgICAg
ICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21haW5JRCgqZG9tYWluKTsKLSAgICAgICAgaWYg
KCFkb21haW5JRFRvTWF0Y2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYmluZFBh
cmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwotICAgIH0KLQotICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwot
Ci0gICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNs
ZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotCi0gICAgaWYgKCFjbGVhclVuYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFy
YW1ldGVyKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyVW5hdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50U3RhdGVtZW50LCBjbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGJpbmRQYXJh
bWV0ZXIpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
ckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCi17Ci0gICAgYXV0byBleHBpcmF0aW9u
VGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6Om1heEFnZSgpOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQs
IGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGlyZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRpbWVG
cmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1T
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9T
dHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01l
YXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKLXsKLSAgICBhdXRvIHNv
dXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5j
b2x1bW5JbnQoMCkpOwotICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWlu
U3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICBhdXRvIHNv
dXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3VyY2VTaXRlRG9t
YWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9tYWluLCAiXG5T
b3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKLQotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAg
ICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7
Ci0gICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KTsKLSAgICAg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg2KTsKLQot
ICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgewotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3JpdHksICJcbkF0
dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7Ci0gICAgICAgICAgICBpZiAoZWFy
bGllc3RUaW1lVG9TZW5kID09IC0xKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJO
b3Qgc2V0Iik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RUaW1lVG9TZW5k
KSAtIFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoc2Vj
b25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhfaCkgPyAiV2l0
aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuTm8gYXR0cmli
dXRpb24gdHJpZ2dlciBkYXRhLiIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50
VG9TdHJpbmcoKQotewotICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3Rz
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNU
IENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQy
Il9zKTsKLSAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPmNvbHVtbkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzLT5jb2x1bW5JbnQoMSkpCi0gICAgICAgIHJldHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBD
bGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwotCi0gICAgYXV0byB1bmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01l
YXN1cmVtZW50VG9TdHJpbmciX3MpOwotCi0gICAgaWYgKCF1bmF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRUb1N0cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gdW5hdHRyaWJ1dGVkTnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnRzOiI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbics
Ci0gICAgICAgICAgICBhdHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCkpOwotICAgIH0KLQotICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnks
ICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVkTnVtYmVy
ID0gMDsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIiLCAiQXR0cmlidXRl
ZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRyaWJ1dGVkTnVtYmVy
ICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAotICAgICAgICAgICAgYXR0cmlidXRpb25Ub1N0
cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCi1zdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmIGF0dHJpYnV0aW9u
KQotewotICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50LCBlYXJsaWVzdFRp
bWVzVG9TZW5kUXVlcnksICJlYXJsaWVzdFRpbWVzVG9TZW5kIl9zKTsKLQotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291
cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1l
VG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKLSAgICBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uOwotICAgIAotICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBv
cnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgIGlmIChzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKLSAgICAgICAgZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKTsKLSAgICAKLSAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkgPiAwLjApCi0gICAgICAgIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgxKTsKLSAgICAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoU291cmNlRG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVt
ZW50LCBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZSJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2Us
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9u
RG9tYWluSUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCi17Ci0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvblN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwg
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkKLXsgICAgCi0gICAgYXV0byB0
aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwotICAgIGF1dG8g
c291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Ci0gICAgYXV0byBk
ZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29uZDsKLQotICAg
IGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0
ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
ID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21h
aW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0aW9uUmVwb3J0
RW5kcG9pbnQpIHsKLSAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50OjpTb3VyY2U6Ci0gICAgICAgIGlmICghc291cmNlRWFybGllc3RUaW1l
VG9TZW5kKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgc291
cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50
OjpEZXN0aW5hdGlvbjoKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2Vu
ZCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24oKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAg
Ly8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1bmxlc3MgaXQg
aGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXRl
LgotICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVz
dFRpbWVUb1NlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVk
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNs
ZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
c0FzRXhwaXJlZEZvclRlc3RpbmcoKQotewotICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBX
YWxsVGltZTo6bm93KCkgLSAxX2g7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlID0gPyJfcyk7Ci0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uID0gbnVsbCJfcyk7Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5i
aW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1TY29wZUV4aXQ8RnVu
Y3Rpb248dm9pZCgpPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9n
cmVzcygpKQotICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsg
W10geyB9IH0pOwotCi0gICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIHJldHVybiBtYWtl
U2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10gewotICAgICAgICBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOwotICAgIH0gfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
dW5kZWYgSVRQX1JFTEVBU0VfTE9HCi0jdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxMjk4NjgzODcxYzdlYmQzY2E3
OTQ5YjA1OGI0MzgwNTFkZWIxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3Rh
dGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxw
YWwvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU1FMaXRlRGF0YWJhc2U7
Ci1jbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93biA6IGJvb2w7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9v
bDsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGlj
ID0gNTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RhdGlzdGljcyA9IDc7Ci1z
dGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dW5zaWduZWQsIG51bWJlck9mQnVja2V0c1BlclN0
YXRpc3RpYz4gYnVja2V0U2l6ZXMge3sgMSwgMywgMTAsIDUwLCAxMDAgfX07Ci0KLWNsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKLWNsYXNzIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjsKLQotdXNpbmcgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci11c2luZyBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OwotdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpT
b3VyY2VTaXRlOwotdXNpbmcgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUgPSBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGU7Ci11c2lu
ZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGE7Ci11c2luZyBFeGlzdGluZ0NvbHVtbnMgPSBWZWN0
b3I8U3RyaW5nPjsKLXVzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJpbmc+OwotdXNp
bmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwotdXNpbmcgRXhwZWN0ZWRDb2x1bW5OYW1l
ID0gU3RyaW5nOwotdXNpbmcgU291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwotdXNp
bmcgRGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBkb3VibGU7Ci11c2luZyBTb3VyY2VE
b21haW5JRCA9IHVuc2lnbmVkOwotdXNpbmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVk
OwotCi10eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gVGFi
bGVBbmRJbmRleFBhaXI7Ci0KLS8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAv
IGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlz
dGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZp
bmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKCk7Ci0KLSAgICBzdGF0aWMg
SGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSo+JiBhbGxTdG9yZXMo
KTsKLSAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3NpZnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVy
KERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBv
cGVuZXJJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2
b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYpIGZpbmFsOwotICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNH
cmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdy
YW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVsYXlB
ZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5
VXNlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCByZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKLSAgICBTZWNvbmRzIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0Owot
ICAgIGJvb2wgaXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KLSAg
ICB2b2lkIHNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlRmlsZTsgfQotICAgIHZvaWQgcmVtb3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxs
RG9tYWlucygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gY2hlY2tGb3JNaXNzaW5n
VGFibGVzSW5TY2hlbWEoKTsKLSAgICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdE
YXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIGludGVycnVwdCgpOwotCi0gICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KLSAg
ICB2b2lkIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNl
bmREYXRhPiBhdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aW9uYWw8UmVnaXN0cmFibGVEb21haW4+
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmco
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7Ci0KLSAgICB2b2lkIG9wZW5J
VFBEYXRhYmFzZSgpOwotICAgIHZvaWQgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgYm9vbCBtaXNzaW5nVW5pcXVlSW5kaWNlcygpOwotICAgIGJvb2wgbmVlZHNVcGRhdGVkU2No
ZW1hKCk7Ci0gICAgYm9vbCBuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVt
YSgpOwotICAgIHZvaWQgcmVuYW1lQ29sdW1uSW5UYWJsZShTdHJpbmcmJiwgRXhpc3RpbmdDb2x1
bW5OYW1lJiYsIEV4cGVjdGVkQ29sdW1uTmFtZSYmKTsKLSAgICB2b2lkIGFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZShTdHJpbmcmJiwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiwgY29uc3QgRXhwZWN0
ZWRDb2x1bW5zJik7Ci0gICAgdm9pZCBhZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgdm9pZCByZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHJlbmFtZUNvbHVt
bkluVGFibGUoKTsKLSAgICBUYWJsZUFuZEluZGV4UGFpciBjdXJyZW50VGFibGVBbmRJbmRleFF1
ZXJpZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1cGRhdGVQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFNjaGVtYUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBlbmFibGVGb3JlaWduS2V5cygpOwot
ICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWREb21haW5zKCk7Ci0gICAgdm9pZCBt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGRlc3Ryb3lTdGF0
ZW1lbnRzKCk7Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+Jiwg
QVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIGJvb2wgaGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1YkZyYW1lRG9tYWluJikgY29u
c3Q7Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNG
aXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIFN0cmlu
ZyBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQpIGNvbnN0OwotICAgIEFTQ0lJ
TGl0ZXJhbCBnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0OwotICAgIHZvaWQgbWVy
Z2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgbWVy
Z2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpOwotICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7Ci0gICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWdu
ZWQpOwotICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmlyc3REb21haW5JRCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7Ci0gICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGRvbWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlTGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxs
VGltZSk7Ci0gICAgdm9pZCB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBpbnQpOwotICAgIHZvaWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKLSAgICBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tC
dXRLZWVwQ29va2llc0ZvcigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKSBjb25zdDsKLSAgICBIYXNo
TWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
KFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEKTsKLSAgICB2b2lkIG1hcmtSZXBv
cnRBc1NlbnRUb1NvdXJjZShTb3VyY2VEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCk7Ci0g
ICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IGVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLQotICAgIHN0
cnVjdCBEb21haW5EYXRhIHsKLSAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7Ci0gICAgICAgIFJl
Z2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOwotICAgICAgICBXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b247Ci0gICAgICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKLSAgICAgICAgYm9vbCBpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOwotICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OwotICAgIH07Ci0g
ICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMoKSBjb25zdDsKLSAgICBib29sIGhhc0hhZFVu
ZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihjb25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5n
RGF0ZXNXaW5kb3cpOwotICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWdu
ZWQ+JiYpOwotICAgIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBoYXNVc2Vy
R3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRD
b3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKLSAgICBzdHJ1Y3QgTm90VmVyeVByZXZh
bGVudFJlc291cmNlcyB7Ci0gICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluOwotICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVuY2U7Ci0gICAgICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKLSAgICAgICAg
dW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50OwotICAgICAgICB1bnNp
Z25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7Ci0KLSAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdDsKLQotICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICBDb29raWVBY2Nlc3MgY29va2llQWNj
ZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLQot
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFy
eURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJj
ZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwotICAgIHZvaWQgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
V2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQoKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7
IE5vLCBZZXMgfTsKLSAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBib29sIHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcpOwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2ll
c0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KTsKLSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwg
Ym9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICBSZWdpc3RyYWJsZURvbWFp
bnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0Rl
bGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEYXRh
YmFzZVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBjcmVh
dGVVbmlxdWVJbmRpY2VzKCk7Ci0gICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKLSAgICBTdHJpbmcg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZShjb25zdCBEb21haW5EYXRhJik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0
ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLSAgICBXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFi
YXNlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25UeXBlKTsKLSAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7
Ci0gICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dD4+IGZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOwotCi0gICAgU2NvcGVFeGl0
PEZ1bmN0aW9uPHZvaWQoKT4+IFdBUk5fVU5VU0VEX1JFVFVSTiBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwot
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBtdXRh
YmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9t
YWluQ291bnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFRvcExldmVsRG9tYWluU3Rh
dGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3Rh
dGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
dXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVu
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0
ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRl
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1l
bnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RvbWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRl
bWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc0V4aXN0c1N0
YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YkZy
YW1lRXhpc3RzU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudDsKLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4
cGlyZWRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhckV4cGlyZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25zU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZmluZFVu
YXR0cmlidXRlZFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RU
aW1lVG9TZW5kU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNl
U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQ7Ci0KLSAgICBQQUw6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX29wZXJhdGluZ0RhdGVz
U2l6ZSB7IDAgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGU7Ci0gICAgc3RkOjpvcHRpb25hbDxPcGVyYXRpbmdEYXRlPiBtX3Nob3J0
V2luZG93T3BlcmF0aW5nRGF0ZTsKLSAgICBPcGVyYXRpbmdEYXRlIG1fbW9zdFJlY2VudE9wZXJh
dGluZ0RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0YWJhc2VTdG9yZSgpOyB9Ci1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNzdlMDk4MGFlYTNkMjY1YTE2YTE4NTI0YjQ3ZWVjYmNiYjNjNjk3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0KLSNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3MgS2V5ZWRFbmNv
ZGVyOwotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwotZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7Ci1zdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFRoaXMgaXMgYWx3
YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBTdXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QpOwotCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNv
bnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFVuaXF1ZVJlZjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPj4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcDsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4g
Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJv
bURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlz
dGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
Y29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5hbDsKLSAgICBib29sIGlzUHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEdyYW5kZmF0
aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKLSAg
ICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWlu
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBj
b25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhcmVBbGxUaGlyZFBh
cnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwot
ICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jh
Z2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVz
KT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21h
aW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29s
IGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQsIGJv
b2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgbG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9t
YWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsK
LSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IE9wZXJhdGluZ0RhdGVzV2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
bW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1Vz
ZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLQotICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBJVFAgbWVtb3J5IHN0b3JlLgotICAg
IHZvaWQgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpIG92
ZXJyaWRlIHsgfTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZSB7IH07Ci0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRz
VW50aWxTZW5kRGF0YT5hdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYp
IG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICB2b2lkIGNsZWFyUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoc3RkOjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4pIG92ZXJyaWRlIHsgfTsKLSAg
ICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGUgeyB9
OwotICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH07Ci0gICAgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkgb3ZlcnJpZGUgeyB9OwotICAgIHZv
aWQgbWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nKCkgb3ZlcnJpZGUgeyB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNP
cGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKSBvdmVycmlkZTsKLSAgICBjb25zdCBWZWN0b3I8T3Bl
cmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdE
YXRlczsgfQotICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIG92ZXJyaWRlIHsgbV9vcGVy
YXRpbmdEYXRlcy5jbGVhcigpOyB9Ci0gICAgdm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYmKTsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7Ci0g
ICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+JiYgbmV3RGF0ZXMpOwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHN0YXRpYyBib29sIHNob3VsZEJs
b2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBz
dGF0aWMgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVk
U3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNl
bnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBjb25zdDsKLSAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcp
IGNvbnN0OwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSBjb25zdDsK
LSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwotICAgIHVuc2lnbmVk
IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9Eb21haW4+
JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9pZCBncmFu
dFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6
OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wg
aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92
ZXJyaWRlOwotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAg
UmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgcmVnaXN0
cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKSBvdmVycmlkZTsK
LSAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgSGFzaE1hcDxSZWdpc3RyYWJs
ZURvbWFpbiwgVW5pcXVlUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+PiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKQotICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
c3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzTWVtb3J5U3RvcmUoKTsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKaW5kZXggZWJlMjM1MzY1NGUwOWEyMjE1ODdiMjU3YWVlNjg3NmVjZjUzMTZl
Mi4uN2JhZjM3YmM4OTQyZWM2ZGEyMzhmMjJjZmRmMjk4NWQyNGVlOThiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTI5LDEwNSArMjksMzEzOCBA
QAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZUphci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBl
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwg
eyA1X3MgfTsKKyNkZWZpbmUgSVRQX1JFTEVBU0VfTE9HKHNlc3Npb25JRCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6IiBm
bXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIElUUF9SRUxFQVNFX0xPR19FUlJPUihz
ZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCisv
LyBDT1VOVCBRdWVyaWVzCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkg
PSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1
dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Citjb25zdGV4cHIgYXV0byBjb3VudFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRv
RG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50UHJldmFsZW50UmVzb3VyY2Vz
UXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDE7Il9zOworY29uc3RleHByIGF1dG8g
Y291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNU
IENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDE7Il9zOworCitj
b25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1QgcmVnaXN0cmFibGVEb21haW4pIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0
aW9uID0gMDsiX3M7CisKKy8vIElOU0VSVCBPUiBJR05PUkUgUXVlcmllcworY29uc3RleHByIGF1
dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFp
bnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAg
ICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFs
ZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
K2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8g
VG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5J
RCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IChzb3VyY2VEb21haW5JRCwgdG9E
b21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJl
Z2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRv
bWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICgg
Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5
ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRz
ICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7
Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJy
ZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKKworLy8gSU5T
RVJUIE9SIFJFUExBQ0UgUXVlcmllcworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIGludG8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9t
YWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyB3aGVyZSBy
ZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0VXBkYXRlZCwgZnJvbURvbWFpbklEKSBT
RUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gaW4gKCAiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFpbklELCBsYXN0VXBkYXRlZCwgdG9wRnJh
bWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3VyY2VEb21haW5JRCwgbGFzdFVwZGF0ZWQs
IHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgorICAgICJzb3VyY2VJRCwgdGltZU9m
QWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQpIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPykiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCwgIgorICAgICJzb3VyY2VJRCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSwgcHJpb3JpdHks
IHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0
dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKKworLy8gRVhJU1RTIFF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNF
TEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCB0b3BGcmFtZURvbWFpbklEID0g
KFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291cmNlRG9tYWluSUQg
PSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RT
IChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7
Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9
ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCBz
dWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN0b3Jh
Z2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExl
dmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworCisvLyBVUERBVEUgUXVlcmllcworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiX3MKKyAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwor
Y29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5
ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVWZXJ5UHJldmFsZW50
UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ZlcnlQcmV2YWxl
bnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNs
ZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQREFURSBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGljayA9IC0xLjAiX3M7Citjb25zdGV4cHIg
YXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51
bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25R
dWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCBXSEVSRSBzb3VyY2VTaXRlRG9tYWlu
SUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7CisKKy8vIFNFTEVDVCBR
dWVyaWVzCitjb25zdGV4cHIgYXV0byBkb21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1Qg
ZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5nRnJvbURvbWFpbklEUXVlcnkgPSAiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
ID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxF
Q1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9
ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1
ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFY
KGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURv
bWFpbklEID0gPyJfcworICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gVG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRvRG9tYWluSUQgPSA/IGFuZCBmcm9tRG9t
YWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBh
bmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCisgICAgIlVOSU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0
ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9t
YWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBnZXRBbGxE
b21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIl9zOworY29uc3RleHByIGF1dG8gZ2V0QWxsU3ViU3RhdGlzdGljc1VuZGVyRG9tYWluUXVl
cnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNU
IHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIHRvRG9t
YWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworY29uc3RleHByIGF1dG8gYWxsQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiU0VMRUNUICosIE1JTihlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgYXMg
bWluVmFsICIKKyAgICAiRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMgTk9UIE5VTEwgQU5EIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNU
ICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFzIG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uIElTIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIElTIE5VTEwgT1JERVIgQlkg
bWluVmFsIl9zOworY29uc3RleHByIGF1dG8gZmluZFVuYXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVD
VCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNl
U2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOworY29u
c3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFO
RCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBlYXJsaWVz
dFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEID0gPyJfczsKKworLy8gRVhJU1RTIGZvciB0ZXN0aW5nIHF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5J
RCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBzY3JpcHRMb2Fk
RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWluSUQgPSA/IE9SIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkg
PSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJf
czsKK2NvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNU
UyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0
ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIG9ic2Vy
dmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPykiX3M7CisKKy8vIERFTEVURSBRdWVyaWVz
Citjb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVlcnkgPSAiREVMRVRFIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNsZWFyVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQg
TElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIExJS0UgPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgTElLRSA/Il9zOworY29u
c3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJE
RUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSA/ID4g
dGltZU9mQWRDbGljayJfczsKK2NvbnN0ZXhwciBhdXRvIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5
ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJF
IHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJf
czsKKworY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxF
IE9ic2VydmVkRG9tYWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBy
ZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBs
YXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBn
cmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRz
UmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCwiCisgICAgImlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7
CisKK2VudW0geworICAgIERvbWFpbklESW5kZXgsCisgICAgUmVnaXN0cmFibGVEb21haW5JbmRl
eCwKKyAgICBMYXN0U2VlbkluZGV4LAorICAgIEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LAorICAg
IE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsCisgICAgR3JhbmRmYXRoZXJlZElu
ZGV4LAorICAgIElzUHJldmFsZW50SW5kZXgsCisgICAgSXNWZXJ5UHJldmFsZW50SW5kZXgsCisg
ICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAorICAgIElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleAorfTsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxE
b21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKCIKKyAgICAidG9wTGV2ZWxE
b21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlH
TiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlu
cyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8g
Y3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04gS0VZKGRvbWFpbklE
KSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUs
ICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZl
ZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291cmNlRG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZ
KHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNF
UyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29u
c3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAoIgorICAgICJzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9S
RUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OworCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAi
Q1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJ0YXJnZXRE
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
IgorICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKSJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIK
KyAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWSh0
b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZFUkVOQ0VTIE9i
c2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4
cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzID0gIkNSRUFURSBU
QUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICgiCisgICAgInRvcEZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
bGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWluSUQgSU5U
RUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhwciBh
dXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCB0b0RvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBj
cmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZP
UkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FT
Q0FERSkiX3M7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFU
RSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgorICAgICJ5ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1v
bnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElOVEVHRVIgTk9UIE5VTEwpIl9zOworCitj
b25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9
ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAg
ICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAg
ICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0b2tlbiBURVhULCBzaWduYXR1cmUgVEVY
VCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNlU2l0ZURvbWFpbklEKSAiCisgICAgIlJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9S
RUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgorICAgICJPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29uc3RleHBy
IGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBU
QUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAgICAic291cmNlU2l0
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBwcmlvcml0eSBJTlRFR0VSIE5PVCBOVUxM
LCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIKKyAgICAiZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVBTCwgIgorICAgICJGT1JFSUdOIEtFWShz
b3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJF
RkVSRU5DRVMgIgorICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKKworLy8gQ1JFQVRFIFVOSVFVRSBJTkRFWCBRdWVyaWVzLgorY29uc3RleHByIGF1
dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFpbklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEICkiX3M7Citjb25z
dGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
ICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudF9zb3VyY2VEb21h
aW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCApIl9zOworY29u
c3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20g
PSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWluSUQgb24gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCApIl9zOworY29uc3RleHBy
IGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20g
KCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c190b3BG
cmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQgb24gVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1YnJlc291cmNlRG9tYWluSUQgKSJfczsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1lRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJyZXNvdXJjZURvbWFpbklEX3RvcEZyYW1l
RG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YnJlc291cmNl
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVU5JUVVFIElO
REVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb19zdWJyZXNvdXJj
ZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1
YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3Vi
cmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEICkiX3M7Citjb25zdGV4
cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBVTklRVUUg
SU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRlc195ZWFyX21vbnRoX21vbnRoRGF5IG9u
IE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1vbnRoRGF5ICkiX3M7Citjb25zdGV4cHIg
YXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWluSURfZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9t
YWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Citjb25zdGV4cHIgYXV0byBjcmVh
dGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUg
VU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlvblNpdGVEb21haW5JRCBvbiBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEICkiX3M7CisKKy8vIEFkZCBvbmUgdG8gdGhlIGNvdW50IG9mIHRoZSBh
Ym92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFi
bGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJl
Y2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgorY29uc3QgaW50IGV4cGVjdGVkSW5kZXhDb3VudCA9
IDE0OworCitzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEo
KQoreworICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERvbWFpbjsKK30KIAotc3RhdGljIFN0cmlu
ZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKK3N0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVy
bmF0ZSgpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9tYWluc1wiIChkb21h
aW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxM
IFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2Vy
SW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZh
bGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
ZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCxpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5VTEwpIl9zOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQorc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRV
bmF0dHJpYnV0ZWRDb2x1bW5zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJ0aW1lT2ZBZENs
aWNrIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcyB9KTsKKyAgICByZXR1
cm4gY29sdW1ucy5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhw
ZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucygpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywgImVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJr
ZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CisgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzTmV3Q3JlYXRlVGFibGVT
Y2hlbWEoY29uc3QgU3RyaW5nJiBzY2hlbWEpCit7CisgICAgcmV0dXJuIHNjaGVtYS5jb250YWlu
cygiUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMiKTsKK30KKworc3RhdGljIFN0cmluZyBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY29uc3QgY2hhciogb3JpZ2luYWxRdWVyeSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKG9yaWdpbmFsUXVlcnkpLnJlcGxhY2UoIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyIsICJDUkVBVEUgVU5JUVVFIElOREVYIik7Cit9CisKK3N0
YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBUYWJsZUFuZEluZGV4UGFpcj4mIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKQorewor
ICAgIHN0YXRpYyBhdXRvIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VGFibGVBbmRJbmRleFBhaXI+IHsKKyAgICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBzdGQ6
Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlT2JzZXJ2ZWRE
b21haW4sIHN0ZDo6bnVsbG9wdCkgfSwKKyAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBz
dGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wTGV2
ZWxEb21haW5zLCBzdGQ6Om51bGxvcHQpIH0sCisgICAgICAgIHsgIlN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4+KGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJ
bmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
KGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hT
dG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB9
LAorICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudCkpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbSwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAg
eyAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUxvYWRlZFRo
aXJkUGFydHlTY3JpcHRzIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgc3RyaXBJbmRl
eFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cykpIH0sCisgICAgICAgIHsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+Pihj
cmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4UXVlcnlUb01hdGNo
U3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KSkgfSwKKyAgICAgICAgeyAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1
ZShjcmVhdGVVbmlxdWVJbmRleFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9LAor
ICAgICAgICB7ICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIl9zLCBzdGQ6Om1ha2VfcGFp
cjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykpIH0sCisgICAgICAgIHsgIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAgeyAiT3BlcmF0aW5nRGF0ZXMi
X3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVP
cGVyYXRpbmdEYXRlcywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVu
aXF1ZUluZGV4T3BlcmF0aW5nRGF0ZXMpKSB9LAorICAgICAgICB7ICJVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+KGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBz
dHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIH0sCisgICAgICAgIHsgIkF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4+KGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4QXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfQorICAgIH0pOworICAgIAorICAgIHJldHVy
biBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5
cGUmIHZhbHVlcykKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWlu
c1RvRGVsZXRlQWxsQ29va2llc0ZvcikKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5p
c0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgZGF0YSkiKTsKLSAg
ICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNvb2tpZXNGb3IpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCBkb21haW4uc3RyaW5n
KCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0
ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWls
ZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQgY29v
a2llcykiKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGljX3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVj
bHR5cGUodmFsdWUpPj4pCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1w
dHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyIn
KTsKKyAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotT3BlcmF0aW5n
RGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKK0hhc2hTZXQ8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4mIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWxsU3RvcmVzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1ZSwgU2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwgbV9zaG91bGRJbmNs
dWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhvc3QpCisgICAgLCBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlRGlyZWN0b3J5UGF0aCwgIm9ic2VydmF0aW9ucy5k
YiJfcykpCisgICAgLCBtX3RyYW5zYWN0aW9uKG1fZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nhcnko
KTsKKyAgICBlbmFibGVGb3JlaWduS2V5cygpOworCisgICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5n
IGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkgYmUgY2Fs
bGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1Zh
Y3V1bSgpKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7CisgICAgYWxsU3RvcmVzKCkuYWRkKHRoaXMpOworfQorCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIGNsb3Nl
KCk7CisgICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xvc2UoKQoreworICAgIGRlc3Ryb3lTdGF0ZW1lbnRzKCk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgp
Cit7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fc3RvcmFnZURpcmVjdG9yeVBh
dGgpKSB7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVj
dG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VGaWxlID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1
c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUpIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
CitzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBtaXNzaW5nVGFibGVzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
IGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZm9yIChh
dXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMg
bWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorICAgIGlmIChtaXNzaW5nVGFibGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBtaXNz
aW5nVGFibGVzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxl
Rm9yZWlnbktleXMoKQoreworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAgaWYg
KCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlw
ZSA9ICd0YWJsZSciX3MpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0
byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Y29sdW1u
VGV4dCgwKTsKKworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PT8gQU5EIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7CisgICAg
aWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsK
KyAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpbmRleCA9IHJh
d0luZGV4OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPj4oV1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRl
eCkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWEoKQoreworICAgIGF1dG8gY3VycmVudFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50Il9zKS5maXJzdDsKKworICAgIGlmICghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkg
JiYgY3VycmVudFNjaGVtYSAhPSBjcmVhdGVBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQorewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYg
KHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNv
dW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWRE
b21haW5zKCkKK3sKKyAgICAvLyBDaGVjayBhIHRhYmxlIGZvciBhIHJlZmVyZW5jZSB0byBUb3BM
ZXZlbERvbWFpbnMsIGEgc2lnbiBvZiB0aGUgb2xkIHNjaGVtYS4KKyAgICBhdXRvIG9sZFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byJfcykuZmlyc3Q7CisgICAgcmV0dXJuIG5lZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEob2xkU2No
ZW1hKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om5lZWRzVXBkYXRl
ZFNjaGVtYSgpCit7CisgICAgLy8gVGhlcmUgYXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBv
dGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUgdG8gdXBncmFkZXMuCisgICAgLy8gQWxsIG90aGVy
IHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRo
ZXkgYXJlIGNvcnJlY3QuCisgICAgaWYgKG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlz
c2luZ1VuaXF1ZUluZGljZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBVTlVTRURfUEFSQU0odGFibGUpOworICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0
KHRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRXhwZWN0
ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRl
bWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCit7Cisg
ICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIikKKyAgICAgICAg
cmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRl
ZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBfU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBH
Uk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEIl9zKTsKKworICAgIGlm
ICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJl
dHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVw
ZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZST00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7
CisKKyAgICBpZiAodGFibGUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQorICAg
ICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxh
c3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9NIF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQiX3MpOworCisgICAgaWYg
KHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWlu
SUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQs
IGZyb21Eb21haW5JRCJfcyk7CisKKyAgICBpZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNF
TEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJ
RCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWlu
SUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zKTsKKworICAgIGlmICh0YWJsZSA9PSAiQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9m
QWRDbGljayksIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBr
ZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAgQlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5h
dGlvblNpdGVEb21haW5JRCJfcyk7CisKKyAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJUIElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJ
TkNUICogRlJPTSBfIiwgdGFibGUpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFu
ZWVkc1VwZGF0ZWRTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBhdXRvIGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1h
a2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpKTsK
KyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjcmVh
dGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0
ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVU
YWJsZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgdGFibGUpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxl
RGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBzY2hlbWEsIGVycm9y
IG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKSk7CisgICAgICAgIGlm
ICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3
VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3Ig
bWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0
YWJsZU5hbWUsICIpIikpOworCisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gY29sdW1uczsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7
CisgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBjb2x1
bW5zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBl
eGlzdGluZ0NvbHVtbnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQor
eworICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5z
aXplKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQg
Q09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5
KCkKK3sKKyAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9ICJVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKKyAgICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRU
YWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworCisgICAg
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgY29sdW1uc0Zv
clRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1u
cygpKTsKKyAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwg
Y29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3RlZEF0dHJpYnV0ZWRD
b2x1bW5zKCkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1l
Q29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4
aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1l
KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAi
LCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCkK
K3sKKyAgICAvLyBBdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgY2FzZS4KKyAg
ICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Il9zOworICAgIGNvbnN0IGF1dG8gb2xkRWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZCJfczsKKyAgICBjb25zdCBhdXRvIG5ld0VhcmxpZXN0
VGltZVRvU2VuZENvbHVtbiA9ICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSJfczsKKyAgICBj
b25zdCBhdXRvIG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiYXR0cmlidXRlT25T
aXRlRG9tYWluSUQiX3M7CisgICAgY29uc3QgYXV0byBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
Q29sdW1uID0gImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zOworICAgIGNvbnN0IGF1dG8gZm91
bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zID0gY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJs
ZU5hbWUpOworCisgICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhv
bGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4pKQorICAgICAgICByZW5hbWVDb2x1bW5JblRhYmxl
KGF0dHJpYnV0ZWRUYWJsZU5hbWUsIG9sZEVhcmxpZXN0VGltZVRvU2VuZENvbHVtbiwgbmV3RWFy
bGllc3RUaW1lVG9TZW5kQ29sdW1uKTsKKworICAgIGlmIChmb3VuZEF0dHJpYnV0ZWRUYWJsZUNv
bHVtbnMuY29udGFpbnMob2xkQXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbikpCisgICAgICAg
IHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRpb25E
ZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7CisKKyAg
ICAvLyBVbmF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgorICAgIGF1
dG8gdW5hdHRyaWJ1dGVkVGFibGVOYW1lID0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50Il9zOworICAgIGF1dG8gZm91bmRVbmF0dHJpYnV0ZWRUYWJsZUNvbHVtbnMgPSBjb2x1
bW5zRm9yVGFibGUodW5hdHRyaWJ1dGVkVGFibGVOYW1lKTsKKworICAgIGlmIChmb3VuZFVuYXR0
cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uKSkKKyAgICAgICAgcmVuYW1lQ29sdW1uSW5UYWJsZSh1bmF0dHJpYnV0ZWRUYWJsZU5hbWUs
IG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4sIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRp
b25Db2x1bW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIG1pc3NpbmdUYWJsZXMgPSBjaGVj
a0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOworICAgIGlmICghbWlzc2luZ1RhYmxlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiB0YWJsZSA6ICptaXNzaW5nVGFibGVzKSB7
CisgICAgICAgIGF1dG8gY3JlYXRlVGFibGVRdWVyeSA9IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1
ZXJpZXMoKS5nZXQodGFibGUpLmZpcnN0OworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmRTbG93KGNyZWF0ZVRhYmxlUXVlcnkpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNz
aW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgfQorCisgICAg
aWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nVGFi
bGVzIGZhaWxlZCB0byBjcmVhdGUgdW5pcXVlIGluZGljZXMsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBvcGVuSVRQRGF0YWJhc2UoKTsKKyAgICBhZGRNaXNzaW5nVGFibGVz
SWZOZWNlc3NhcnkoKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0
YWJsZS4KKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdP
YnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVt
YSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJsZS4iKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUg
aXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxlLgorICAgICAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAg
ICAgICAgICAgIG9wZW5JVFBEYXRhYmFzZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsK
KyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKKworICAgIC8v
IElmIHRoZSBPYnNlcnZlZERvbWFpbnMgc2NoZW1hIGluIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIGRpcmVjdG9yeSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1hLCBkZWxldGUgdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgLy8gRklYTUU6IE1pZ3JhdGUgb2xkIE9ic2VydmVkRG9tYWlucyBkYXRh
IHRvIG5ldyB0YWJsZSBzY2hlbWEuCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIG9w
ZW5JVFBEYXRhYmFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVuYW1p
bmcgYW5kIGFkZGluZyBjb2x1bW5zIHNob3VsZCBiZSBkb25lIGJlZm9yZSBtaWdyYXRpbmcgdG8g
YXZvaWQgbWlzbWF0Y2hlZCBvciBtaXNzaW5nIGNvbHVtbnMuCisgICAgcmVuYW1lQ29sdW1uc0lm
TmVjZXNzYXJ5KCk7CisgICAgYWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpOworICAgIG1p
Z3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOworfQorCitTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjb3BlZFN0YXRlbWVu
dChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBB
U0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAoreworICAg
IGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dE9yRXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5n
LmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0
ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnRlcnJ1cHQoKQoreworICAgIGlmIChtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICBtX2RhdGFiYXNlLmludGVycnVwdCgpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERv
bWFpbkNvdW50UXVlcnksICJpc0VtcHR5Il9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNFbXB0eSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuICFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZVVuaXF1ZUluZGljZXMoKQoreworICAgIGlmICgh
bV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICB8
fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpCisgICAgICAgIHx8
ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSkKKyAgICAgICAgfHwg
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAg
IHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
KQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eE9wZXJhdGluZ0RhdGVzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleEF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVVbmlx
dWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZU9i
c2VydmVkRG9tYWluKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRv
cExldmVsRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRv
cExldmVsRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNy
ZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlT3BlcmF0aW5nRGF0ZXMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBPcGVyYXRpbmdEYXRlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZUF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY3Jl
YXRlVW5pcXVlSW5kaWNlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlc3Ryb3lTdGF0
ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
ID0gbnVsbHB0cjsKKyAgICBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fdXBkYXRlVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2lzVmVyeVByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3RvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9nZXRSZXNvdXJj
ZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAg
ICBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxscHRyOwor
ICAgIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckV4cGlyZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9hbGxVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9hbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9maW5kQXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV91cGRhdGVBdHRy
aWJ1dGlvbnNFYXJsaWVzdFRpbWVUb1NlbmRTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX21hcmtSZXBvcnRBc1Nl
bnRUb1NvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9tYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9lYXJsaWVzdFRpbWVzVG9TZW5k
U3RhdGVtZW50ID0gbnVsbHB0cjsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxv
YWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGRvbWFpbklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBkb21h
aW5zIG5vdCBpbiB0aGUgZGF0YWJhc2UuIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQs
IGluc2VydE9ic2VydmVkRG9tYWluUXVlcnksICJpbnNlcnRPYnNlcnZlZERvbWFpbiJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
VGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4LCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZERvdWJsZShMYXN0U2VlbkluZGV4LCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZERvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBsb2FkU3Rh
dGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJ
bnQoR3JhbmRmYXRoZXJlZEluZGV4LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KElzUHJldmFsZW50
SW5kZXgsIGxvYWRTdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgs
IGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbElu
ZGV4LCBsb2FkU3RhdGlzdGljcy5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJj
ZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRPYnNlcnZlZERv
bWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2NvcGVk
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0
aW9uc2hpcEV4aXN0cyhTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYgc3RhdGVtZW50LCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdAoreworICAgIGlmICghZmlyc3REb21haW5JRCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEs
ICpmaXJzdERvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWxhdGlvbnNoaXBFeGlzdHMgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiAhIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnks
ICJkb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWluTGlzdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChhdXRvJiB0b3BGcmFtZVJlc291cmNlIDogZG9tYWluTGlzdCkgeworICAgICAgICAv
LyBJbnNlcnQgcXVlcnkgd2lsbCBmYWlsIGlmIHRvcCBmcmFtZSBkb21haW4gaXMgbm90IGFscmVh
ZHkgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGlmIChlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZVJlc291cmNlKS5zZWNvbmQpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB0b3BG
cmFtZVJlc291cmNlLnN0cmluZygpLCAnIicpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQor
eworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgCisgICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKKyAg
ICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBXYWxs
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluc2VydFJl
bGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJl
Z2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbik7CisgICAgCisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWlu
SUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0
YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklE
LnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBs
b2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJs
ZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVn
aXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlw
dHMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQs
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFu
c2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGN1cnJlbnRSZWdpc3RyYWJsZURvbWFp
biA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCk7CisgICAgYXV0
byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5Eb3VibGUoTGFzdFNlZW5JbmRleCk7
CisgICAgYXV0byBjdXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGN1cnJlbnQtPmNv
bHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4KTsKKyAgICBib29s
IGN1cnJlbnRHcmFuZGZhdGhlcmVkID0gY3VycmVudC0+Y29sdW1uSW50KEdyYW5kZmF0aGVyZWRJ
bmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1bW5JbnQo
SXNQcmV2YWxlbnRJbmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNWZXJ5UHJldmFsZW50ID0gY3Vy
cmVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KTsKKyAgICB1bnNpZ25lZCBjdXJy
ZW50RGF0YVJlY29yZHNSZW1vdmVkID0gY3VycmVudC0+Y29sdW1uSW50KERhdGFSZWNvcmRzUmVt
b3ZlZEluZGV4KTsKKyAgICBib29sIGN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsID0gY3VycmVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxJbmRleCk7CisKKyAgICBBU1NFUlQoY3VycmVudFJlZ2lzdHJhYmxlRG9tYWlu
ID09IG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGlmIChXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoY3VycmVudExhc3RTZWVuKSA8IG90aGVyLmxhc3RTZWVuKQorICAg
ICAgICB1cGRhdGVMYXN0U2VlbihvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIubGFzdFNl
ZW4pOworCisgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8g
SWYgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB0aW1lIGhhcyBiZWVuIHJlc2V0IGRvIHNv
IGhlcmUgdG9vLgorICAgICAgICBpZiAoIW90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKQorICAgICAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBmYWxzZSwgeyB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlLCBzdGQ6Om1heChXYWxsVGltZTo6ZnJvbVJh
d1NlY29uZHMoY3VycmVudE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBvdGhlci5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkpOworCisgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQg
JiYgIWN1cnJlbnRHcmFuZGZhdGhlcmVkKQorICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVy
LnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKKyAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNv
dXJjZSAmJiAhY3VycmVudElzUHJldmFsZW50KQorICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVu
dFJlc291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQorICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgIGlmIChvdGhlci5k
YXRhUmVjb3Jkc1JlbW92ZWQgPiBjdXJyZW50RGF0YVJlY29yZHNSZW1vdmVkKQorICAgICAgICB1
cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQob3RoZXIucmVnaXN0cmFibGVEb21haW4sIG90aGVyLmRh
dGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgaWYgKG90aGVyLmdvdExpbmtEZWNvcmF0aW9uRnJvbVBy
ZXZhbGVudFJlc291cmNlICYmICFjdXJyZW50SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBzdGF0aXN0aWMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJl
c291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5O
YW1lUXVlcnksICJtZXJnZVN0YXRpc3RpYyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJn
ZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMgbm90IGZv
dW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3Rh
dGlzdGljKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3Rh
dGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3MpIHsKKyAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9t
YWluKHN0YXRpc3RpYyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY3MgaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFp
bGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXJnZVN0YXRpc3RpYyhzdGF0aXN0aWMpOworICAg
IH0KKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcy4KKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKK30KKworc3RhdGljIEFT
Q0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKQoreworICAgIHJldHVybiAi
U0VMRUNUIGRvbWFpbklELCIKKyAgICAgICAgIihjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSAr
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lICsgY291bnRVbmlxdWVSZWRpcmVjdFRvKSBh
cyBzdW0gICIKKyAgICAgICAgIkZST00gKCAiCisgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAg
ICAgImRvbWFpbklELCAiCisgICAgICAgICAgICAiQ09VTlQoRElTVElOQ1QgZi50b3BGcmFtZURv
bWFpbklEKSBhcyBjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSwgIgorICAgICAgICAgICAgIkNP
VU5UKERJU1RJTkNUIHIudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJSZXNvdXJjZVVuZGVy
VG9wRnJhbWUsICIKKyAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCB0b0RvbWFpbklEKSBhcyBj
b3VudFVuaXF1ZVJlZGlyZWN0VG8gIgorICAgICAgICAiRlJPTSAiCisgICAgICAgICJPYnNlcnZl
ZERvbWFpbnMgbyAiCisgICAgICAgICJMRUZUIEpPSU4gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyBmIE9OIG8uZG9tYWluSUQgPSBmLnN1YkZyYW1lRG9tYWluSUQgIgorICAgICAgICAiTEVG
VCBKT0lOIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgciBPTiBvLmRvbWFpbklEID0g
ci5zdWJyZXNvdXJjZURvbWFpbklEICIKKyAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvIHUgT04gby5kb21haW5JRCA9IHUuc3VicmVzb3VyY2VEb21haW5JRCAi
CisgICAgICAgICJXSEVSRSBpc1ByZXZhbGVudCBMSUtFID8gIgorICAgICAgICAiYW5kIGhhZFVz
ZXJJbnRlcmFjdGlvbiBMSUtFID8gIgorICAgICAgICAiR1JPVVAgQlkgZG9tYWluSUQpIE9SREVS
IEJZIHN1bSBERVNDOyJfczsKK30KKworVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRoaXJkUGFydHlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRBbGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRB
bGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5RdWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3Bl
Y2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGly
ZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4sIGVycm9yIG1lc3Nh
Z2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5
PiB0aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7CisgICAgd2hpbGUg
KHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbiA9IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudC0+Y29sdW1uSW50KDApKSk7Cisg
ICAgICAgIHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucy5hcHBlbmRJ
Zk5vdENvbnRhaW5zKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHkgeyBmaXJzdFBhcnR5RG9tYWluLCBoYXNTdG9yYWdlQWNj
ZXNzKGZpcnN0UGFydHlEb21haW4sIHRoaXJkUGFydHlEb21haW4pLCBnZXRNb3N0UmVjZW50bHlV
cGRhdGVkVGltZXN0YW1wKHRoaXJkUGFydHlEb21haW4sIGZpcnN0UGFydHlEb21haW4pIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zOworfQorCitzdGF0aWMgYm9vbCBoYXNCZWVuVGhpcmRQYXJ0eSh1bnNpZ25lZCB0aW1lc1Vu
ZGVyRmlyc3RQYXJ0eSkKK3sKKyAgICByZXR1cm4gdGltZXNVbmRlckZpcnN0UGFydHkgPiAwOwor
fQorCitWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFy
dHlEYXRhTGlzdDsKKyAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVy
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3MgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkp
OworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNz
LT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKKyAgICAgICAgfHwg
c29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OworICAgIH0KKyAg
ICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkp
IHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGlj
cy0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7CisgICAg
ICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGly
ZFBhcnR5RG9tYWluKSB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0
eURhdGFMaXN0OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVt
ZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRz
UmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21h
aW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1
bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJl
ZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJIaXQgJXUgcmVj
dXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJuaW5nIGVhcmx5LiIsIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAorICAgICsrbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxsczsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlmaWVkRG9t
YWluczsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJl
c291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLT5j
b2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRS
ZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQo
bmV3RG9tYWluSUQpOworICAgIH0KKworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZy
YW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5jb2x1
bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJl
Y3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRSZXN1
bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3
RG9tYWluSUQpOworICAgIH0KKworICAgIGlmIChuZXdseUlkZW50aWZpZWREb21haW5zLmVtcHR5
KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgZm9yIChh
dXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykKKyAgICAgICAgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0OworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFp
bnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRl
bWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmlu
c2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIH0K
KworICAgIGF1dG8gdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291
cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7
CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAg
ICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
YnVpbGRMaXN0KHByZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQ
cmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitIYXNoTWFwPHVuc2lnbmVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDx1
bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBhdXRvIG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlm
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAg
ICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVt
bkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklE
c09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOworCisgICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmICghZG9tYWluSUQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAo
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1
bW5JbnQoMCkpOworICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
ICghZG9tYWluSUQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAgICBBU1NFUlQoZG9tYWluSUQpOworICAg
ICAgICAgICAgaWYgKCFkb21haW5JRCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFr
ZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKKyAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAoIWRv
bWFpbklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBy
ZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcygpCit7CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJ
T04pCisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXMgPSBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNraXAocmVzb3VyY2VTdGF0
aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgYXV0byBuZXdQcmV2YWxlbmNlID0gY2xhc3NpZmllcigpLmNhbGN1bGF0ZVJlc291cmNlUHJl
dmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCBy
ZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnByZXZhbGVuY2UpOworICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSByZXNv
dXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3Vy
Y2UocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOwor
ICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xh
c3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIG1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgcmVjbGFzc2lm
eVJlc291cmNlcygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVu
SW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBtX2RhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1lRG9tYWluJiBz
dWJGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQsIHN0b3JhZ2VB
Y2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFpbiks
IHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIHN0ZDo6b3B0aW9uYWw8RnJhbWVJ
ZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3Mgd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChjb29raWVBY2Nlc3Moc3ViRnJhbWVEb21h
aW4sIHRvcEZyYW1lRG9tYWluKSkgeworICAgIGNhc2UgQ29va2llQWNjZXNzOjpDYW5ub3RSZXF1
ZXN0OgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeToKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1YkZyYW1l
RG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBz
dG9yZS0+aGFzQ29va2llcyhzdWJGcmFtZURvbWFpbiwgW3N0b3JlLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6CisgICAgICAgIC8v
IEhhbmRsZWQgYmVsb3cuCisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBzdG9y
ZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBz
Y29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNv
bmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIHdhcyBub3Qg
Y29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNvb2tpZUFjY2VzcyhzdWJGcmFtZURv
bWFpbiwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkNhbm5vdFJl
cXVlc3Q6CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3Jh
Z2UgYWNjZXNzIHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29raWVzIGFy
ZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVk
IHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3Ry
aW5nKCJbSVRQXSBDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVE
b21haW4uc3RyaW5nKCksICInIHNpbmNlIGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJk
LXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24g
YXMgZmlyc3QtcGFydHkuIl9zKSk7CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeToKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJObyBuZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNz
IHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxv
Y2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4gTm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNv
b2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJsb2NrIHRoaXMgdGhpcmQtcGFydHkgZnJvbSBzZXR0aW5n
IGNvb2tpZXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERl
YnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIE5vIG5lZWQgdG8gZ3Jh
bnQgc3RvcmFnZSBhY2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHNp
bmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4g
Tm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNvb2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJsb2NrIHRo
aXMgdGhpcmQtcGFydHkgZnJvbSBzZXR0aW5nIGNvb2tpZXMuIl9zKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llQWNjZXNzOjpPbmx5SWZHcmFudGVkOgor
ICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBh
dXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NU
aHJvdWdoUHJvbXB0KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAg
ICBpZiAodXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hv
d246Ok5vKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiQWJvdXQgdG8gYXNrIHRo
ZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICUiIFBS
SVZBVEVfTE9HX1NUUklORyAiIHVuZGVyICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIG9yIG5vdC4i
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFr
ZVN0cmluZygiW0lUUF0gQWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRv
IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICciX3MsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLCAi
JyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgb3Igbm90LiJfcykpOwor
ICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6
OlJlcXVpcmVzVXNlclByb21wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
dXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Olll
cykgeworICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdhcyBn
cmFudGVkIHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHVuZGVyICUiIFBSSVZBVEVfTE9HX1NU
UklORyAiLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNh
c3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAnIl9z
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgdW5kZXIgJyJfcywgdG9wRnJhbWVEb21haW4u
c3RyaW5nKCksICInLiJfcykpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNz
QVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICghaW5jcmVtZW50U3RvcmFn
ZUFjY2VzcworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLT5iaW5kSW50KDEsICpz
dWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbmNyZW1lbnRT
dG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1v
dmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxp
ZXIsIHNjb3BlLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkID09IFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVk
OjpZZXMgPyBTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MgOiBTdG9yYWdlQWNjZXNzU3Rh
dHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKK3sK
KyAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKKyAgICB9CisKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nl
c3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BG
cmFtZURvbWFpbiwgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duLCBTdG9yYWdlQWNj
ZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dy
YW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7CisKKyAgICBpZiAocHJvbXB0V2FzU2hvd24gPT0gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpZZXMpIHsKKyAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
KyAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKKyAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxl
ZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8p
OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNX
aXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWlu
KSkKKyAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CisjZW5kaWYKKyAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgfQorCisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50
ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBm
cmFtZUlELCBwYWdlSUQsIHByb21wdFdhc1Nob3duLCBzY29wZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9w
RnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3RkOjpvcHRpb25hbDxGcmFtZUlkZW50aWZp
ZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdh
c1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2Nv
cGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1lRG9tYWluKSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkOjpZZXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CisgICAgICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICAgICAgaWYgKCFzdWJGcmFtZVN0
YXR1cy5zZWNvbmQpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nl
c3NJbnRlcm5hbCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFkZGVkUmVjb3JkOjpObyk7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICAgICAgaWYgKCFOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNhblJlcXVlc3RTdG9y
YWdlQWNjZXNzRm9yTG9naW5PckNvbXBhdGliaWxpdHlQdXJwb3Nlc1dpdGhvdXRQcmlvclVzZXJJ
bnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pKQorICAgICAgICAgICAg
QVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgT3BlcmF0aW5nRGF0
ZXNXaW5kb3c6OkxvbmcpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlQoaGFzVXNlckdyYW50ZWRT
dG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFt
ZURvbWFpbikgPT0gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpOworI2VuZGlmCisg
ICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwgV2FsbFRpbWU6
Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1l
RG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0g
dG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzY29wZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3Jh
Z2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwg
cGFnZUlELCBzY29wZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIHN0b3JlXShTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbd2FzR3Jh
bnRlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mo
W3N0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNo
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgIH0KKworICAgIGF1dG8g
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0g
MSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIp
KTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1h
cnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3Ig
ZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSIsIHRoaXMpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50
UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURv
bWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNl
KCkpOworCisgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWls
ZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UiLCB0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkpOworCisgICAgICAgIGlmIChk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQ
RGVidWcsICJEaWQgc2V0ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIGFzIHByZXZhbGVudCByZXNv
dXJjZSBmb3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRl
YnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3Nh
Z2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gRGlkIHNldCAnIl9zLCBkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5nKCksICInIGFzIHByZXZhbGVudCByZXNvdXJjZSBm
b3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiJfcykpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRp
cmVjdCwgYm9vbCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1l
bnRMb2FkLCBib29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURv
bWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKKyAgICBib29s
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3Vy
Y2VEb21haW47CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9u
SWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7
CisgICAgaWYgKCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1Nh
bWVTaXRlIHx8IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKKyAgICAgICAg
YXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQp
IHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWluIiwg
dGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlTGFz
dFNlZW4odGFyZ2V0RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVz
b2x1dGlvbihXYWxsVGltZTo6bm93KCkpKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
IWFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkgeworICAgICAgICBpZiAoaXNNYWlu
RnJhbWUpIHsKKyAgICAgICAgICAgIGJvb2wgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERlbGF5V2l0
aG91dFVzZXJJbnRlcmFjdGlvbiA9ICF3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciAmJiBk
ZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkIDwgcGFyYW1ldGVycygpLm1pbkRlbGF5QWZ0
ZXJNYWluRnJhbWVEb2N1bWVudExvYWRUb05vdEJlQVJlZGlyZWN0OworICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QgfHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRl
cmFjdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21h
aW4pOworICAgICAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0
LnNlY29uZCkgeworICAgICAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZp
Z2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgb2Yg
dGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNNYWluRnJhbWUpIiwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVk
aXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZWRp
cmVjdCkgeworICAgICAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRp
cmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAlIiBQVUJMSUNfTE9HX1NUUklO
RyAiIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAlIiBQVUJMSUNfTE9HX1NUUklO
RyAiLiIsIHNvdXJjZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0YXJnZXREb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0Jy
b2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2
ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkRpZCBzZXQgJyIsIHNvdXJjZURvbWFpbi5zdHJpbmcoKSwg
IicgYXMgbWFraW5nIGEgdG9wIGZyYW1lIHJlZGlyZWN0IHRvICciLCB0YXJnZXREb21haW4uc3Ry
aW5nKCksICInLiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHNvdXJj
ZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNSZWRpcmVjdCkgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURv
bWFpbik7CisgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAgICAgICBp
ZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCkgeworICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgb3Ig
cmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0
LnNlY29uZCk7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAg
c3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29uc3QgTmF2aWdh
dGVkRnJvbURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mIHRvRG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChmcm9t
RG9tYWluICE9IHRvRG9tYWluKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0b0RvbWFpblJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvRG9tYWluKTsKKyAg
ICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9n
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zy
b21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBmcm9tRG9tYWluIH0pLCAqdG9E
b21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAKKyAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShm
cm9tRG9tYWluKSkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCF0YXJnZXRS
ZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byByZW1vdmVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZQorICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGUtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
LCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVyYWN0aW9u
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAic2V0VXNl
ckludGVyYWN0aW9uIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RSZWNlbnRJ
bnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5l
Y2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgewor
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBib29sIGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKTsKKyAgICBz
ZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOworCisgICAg
aWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNh
Y3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0
YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb21haW4pOworICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIGZhbHNlLCB7IH0pOworCisgICAgYXV0byByZW1v
dmVTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Il9z
KTsKKyAgICBpZiAoIXJlbW92ZVN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFn
ZUFjY2Vzcy0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2Fs
bCB0byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQorICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91
cyB1c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9u
KCksCisgICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KKyAgICB1cGRhdGVDb29raWVCbG9j
a2luZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2hhZFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudCwgaGFkVXNlckludGVyYWN0aW9uUXVlcnksICJoYXNIYWRVc2VySW50ZXJhY3Rpb24i
X3MpOworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAhIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworICAgIGlmICghaGFkVXNl
ckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
c2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkpOworCisgICAgaWYgKGhhc1N0YXRpc3Rp
Y3NFeHBpcmVkKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBvcGVyYXRpbmdEYXRlc1dp
bmRvdykpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ug
d2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0
aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJl
c2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAgIGNsZWFyVXNlckludGVy
YWN0aW9uKGRvbWFpbiwgW10geyB9KTsKKyAgICAgICAgaGFkVXNlckludGVyYWN0aW9uID0gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVu
Y2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc2hvdWxk
U2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVnaXN0cmFi
bGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7CisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFp
bklEKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSBkb21haW5J
RCBzaG91bGQgZXhpc3QgYnV0IHdhcyBub3QgZm91bmQuIiwgdGhpcyk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzY29w
ZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCB1cGRhdGVQcmV2YWxlbnRSZXNv
dXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2UiX3MpOworICAgIGlmICghc2NvcGVkVXBk
YXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgy
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRVcGRhdGVQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNjb3BlZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNv
dXJjZVN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCwgdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnksICJz
ZXRQcmV2YWxlbnRSZXNvdXJjZSB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2UiX3MpOworICAg
IGlmIChuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKSB7
CisgICAgICAgIGlmICghc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
CisgICAgICAgICAgICB8fCBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzY29wZWRVcGRh
dGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzY29wZWRVcGRhdGVWZXJ5UHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgU3RkU2V0PHVuc2ln
bmVkPiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7CisgICAgcmVjdXJzaXZlbHlGaW5k
Tm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJs
ZURvbWFpbklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOworICAgIHNldERv
bWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RG9tYWluc0FzUHJl
dmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0
KGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlm
IChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7CisgICAgICAgIG1fZGF0YVJlY29yZFJlbW92
YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRlbWVudCwgZ2V0QWxs
RG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3MpOworICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPFN0cmlu
Zz4gZG9tYWluczsKKyAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5UZXh0
KDApKTsKKyAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpLCBXVEY6
OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
KyAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6XG5cbiIpOworICAg
IGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgcmVzb3VyY2VUb1N0cmluZyhy
ZXN1bHQsIGRvbWFpbik7CisKKyAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0gYWdncmVnYXRlZFRo
aXJkUGFydHlEYXRhKCk7CisgICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOworICAgICAgICBmb3IgKGF1dG8g
dGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0
aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOworICAgIH0KKyAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXN1bHQudG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFwcmVk
aWNhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBwcmVkaWNhdGVTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmVk
aWNhdGVWYWx1ZUZvckRvbWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gISFwcmVkaWNhdGVTdGF0ZW1lbnQt
PmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzaG91bGRTa2lw
KGRvbWFpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dCwgaXNQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Cisg
ICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWlu
KTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBp
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiX3Mp
OworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRv
bWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNl
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bkV4aXN0c1N0YXRlbWVudCwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzUXVl
cnksICJpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJyZXNvdXJjZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3Vi
RnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
UXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFpbiks
IHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYg
cmVkaXJlY3RlZEZyb21Eb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgcmVkaXJlY3Rl
ZFRvRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzU3RhdGVtZW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvRXhpc3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iX3MpOwor
ICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChy
ZWRpcmVjdGVkRnJvbURvbWFpbiksIHJlZGlyZWN0ZWRUb0RvbWFpbik7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRSZXNvdXJjZSJfcyk7CisgICAgCisgICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBk
YXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0
R3JhbmRmYXRoZXJlZCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29s
IHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0
ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSwg
InNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiX3MpOworICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCB2
YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQo
MiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworU2Vj
b25kcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRU
aW1lc3RhbXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkRvbWFpbiwgY29uc3QgVG9wRnJh
bWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3ViRnJhbWVEb21haW5J
RCA9IGRvbWFpbklEKHN1YkRvbWFpbik7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG9w
RnJhbWVEb21haW5JRCA9IGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGlmICghc3Vi
RnJhbWVEb21haW5JRCB8fCAhdG9wRnJhbWVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuIFNlY29u
ZHMgeyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOb0V4aXN0aW5nVGltZXN0YW1wIH07CisgICAg
CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRN
b3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wU3RhdGVtZW50LCBnZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wUXVlcnksICJnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wIl9zKTsK
KyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnN1YkZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgKnN1YkZyYW1lRG9tYWluSUQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNCwgKnRv
cEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoNSwgKnN1YkZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNiwgKnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNywgKnN1YkZyYW1lRG9tYWlu
SUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoOCwg
KnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKKyAg
ICB9CisgICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAg
ICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1Rp
bWVzdGFtcCAgfTsKKworICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMCkgfTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzY29wZWRTdGF0ZW1l
bnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIGlz
R3JhbmRmYXRoZXJlZFF1ZXJ5LCAiaXNHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICByZXR1cm4gcHJl
ZGljYXRlVmFsdWVGb3JEb21haW4oc2NvcGVkU3RhdGVtZW50LCBkb21haW4pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQp
IHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUg
d2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4u
CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4g
fSksICpyZXN1bHQuc2Vjb25kKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURv
bWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0
byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
dWJyZXNvdXJjZURvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21w
bGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2
ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1
ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVz
dWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJl
c291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VE
b21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBm
YWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNz
IGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNv
bnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVk
aXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4odG9wRnJhbWVEb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSks
ICpyZXN1bHQuc2Vjb25kKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWlu
KTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQg
aW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKK30KKworc3RkOjpw
YWlyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB7CisgICAg
ICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWlu
SURGcm9tU3RyaW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKKyAgICAgICAgaWYgKCFz
Y29wZWRTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQo
MSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbiBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgMCB9OworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Cisg
ICAgICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIGRvbWFpbklEIH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2VydmF0aW9uKGRv
bWFpbik7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNlcnZh
dGlvbik7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4gaW5zZXJ0T2JzZXJ2ZWREb21h
aW4gZmFpbGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCBzdGQ6Om51bGxv
cHQgfTsKKyAgICB9CisKKyAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChk
b21haW4pLnZhbHVlKCkgfTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCit7CisgICAgbV9kYXRhYmFzZS5jbGVhckFsbFRhYmxl
cygpOworCisgICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0
YWJhc2VDb250ZW50cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCksIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFp
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIGF1dG8gZG9tYWluSURU
b1JlbW92ZSA9IGRvbWFpbklEKGRvbWFpbik7CisgICAgaWYgKCFkb21haW5JRFRvUmVtb3ZlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9yZW1vdmVBbGxEYXRhU3RhdGVtZW50LCByZW1vdmVBbGxEYXRhUXVl
cnksICJyZW1vdmVEYXRhRm9yRG9tYWluIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKmRvbWFpbklEVG9SZW1vdmUp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmFsbERvbWFpbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9n
ZXRBbGxEb21haW5zU3RhdGVtZW50LCBnZXRBbGxEb21haW5zUXVlcnksICJhbGxEb21haW5zIl9z
KTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluczsKKyAgICB3aGlsZSAoc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZG9tYWlucy5hcHBlbmQoUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhzY29wZWRTdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkpKTsKKyAgICByZXR1cm4gZG9tYWluczsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGNsZWFyRGF0YWJhc2VDb250ZW50cygpOworICAgIGNsZWFy
T3BlcmF0aW5nRGF0ZXMoKTsKKworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAg
cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworCisgICAg
YXV0byByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciA9IGVuc3Vy
ZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIFJlZ2lzdHJhYmxlRG9tYWlu
c1RvQmxvY2tDb29raWVzRm9yIGRvbWFpbnNUb0Jsb2NrIHsgcmVnaXN0cmFibGVEb21haW5zVG9C
bG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIHsgfSwgeyB9LCB7IH0gfTsKKyAgICB1cGRhdGVDb29r
aWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphcmVBbGxUaGly
ZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pCit7CisgICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAhaGFzSGFk
VXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb29r
aWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb29raWVBY2Nlc3MoY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFp
biYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNvb2tpZUFjY2VzcyBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgYm9vbCBoYXNOb0VudHJ5ID0gc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKKyAg
ICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKTsKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRl
bWVudC0+Y29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworCisgICAgaWYgKCFhcmVBbGxUaGly
ZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcih0b3BGcmFtZURvbWFpbikgJiYgIWlzUHJldmFsZW50
KQorICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OworCisg
ICAgaWYgKCFOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNhblJlcXVlc3RTdG9yYWdlQWNjZXNzRm9y
TG9naW5PckNvbXBhdGliaWxpdHlQdXJwb3Nlc1dpdGhvdXRQcmlvclVzZXJJbnRlcmFjdGlvbihz
dWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pICYmICFoYWRVc2VySW50ZXJhY3Rpb24p
CisgICAgICAgIHJldHVybiBDb29raWVBY2Nlc3M6OkNhbm5vdFJlcXVlc3Q7CisKKyAgICByZXR1
cm4gQ29va2llQWNjZXNzOjpPbmx5SWZHcmFudGVkOworfQorCitTdG9yYWdlQWNjZXNzUHJvbXB0
V2FzU2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3Jh
Z2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZpcnN0UGFydHlEb21haW4pOworICAgIGlmICghcmVz
dWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdl
QWNjZXNzVGhyb3VnaFByb21wdCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2Vy
dCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOworICAgIH0KKworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9
ICpyZXN1bHQuc2Vjb25kOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9z
KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
cmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKworICAgIHJldHVybiAhIXN0YXRlbWVudC0+
Y29sdW1uSW50KDApID8gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOworfQorCitWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29r
aWVzRm9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFp
biBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDAiX3MpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENy
ZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkp
KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENv
b2tpZXNGb3IoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4g
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50
ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7
CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwor
ICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3
aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURv
bWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkpKTsKKworICAgIHJldHVybiByZXN1
bHRzOworfQorCitIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MoKSBjb25z
dAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3Vs
dHM7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVn
aXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0
b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5k
b21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHou
dG9wTGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICByZXN1bHRzLmFkZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSksIFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9y
KCk7CisgICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yID0gdGhpcy0+ZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOworICAgIGF1dG8gZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bkFzRmlyc3RQYXJ0eSgpOworICAgIGF1dG8gZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzID0gdGhp
cy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2tB
bmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29r
aWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0
eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzLmlzRW1wdHkoKSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9tYWluc1RvQmxvY2sgeyBkb21h
aW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5LCBkb21haW5zV2l0
aFN0b3JhZ2VBY2Nlc3MgfTsKKworICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgJiYgKCFk
b21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNFbXB0eSgpIHx8ICFkb21haW5zVG9C
bG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCisgICAgICAgIGRlYnVnTG9nRG9tYWlu
c0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFja2luZyByZXN0cmljdGlvbnMiLCBk
b21haW5zVG9CbG9jayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGRvbWFpbnNU
b0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0
b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihk
b21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9
IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkod2Vha1RoaXMtPmRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFja2luZyByZXN0cmljdGlv
bnMuIik7CisgICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5kZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sICJb
SVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tpbmcgcmVzdHJpY3Rpb25zLiJfcyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpEb21haW5EYXRhPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnMoKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFZlY3RvcjxEb21haW5EYXRhPiByZXN1
bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBP
YnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCop
IGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQp
IGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAs
IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAs
IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0
YXRlbWVudC0+Y29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Y29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmNvbHVtbkludCg2KSkKKyAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWlu
SURzVG9DbGVhcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlm
IChkb21haW5JRHNUb0NsZWFyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKKworICAgIGF1dG8g
Y2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJl
ZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKKyAgICBpZiAo
IWNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nIGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4cGlyZWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IE9wZXJhdGluZ0RhdGVzV2luZG93IG9wZXJhdGluZ0RhdGVzV2luZG93KQoreworICAgIGlmIChy
ZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgaGFzU3RhdGlzdGljc0V4cGly
ZWQocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIG9wZXJh
dGluZ0RhdGVzV2luZG93KSkgeworCisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICAgICAgaWYgKG9wZXJhdGluZ0RhdGVz
V2luZG93ID09IE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKQorICAgICAgICAgICAgY2xlYXJV
c2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIFtdIHsg
fSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihjb25zdCBEb21haW5E
YXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KQoreworICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9u
KHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykgJiYgKCFzaG91
bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhl
cmVkKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92
ZUFsbEJ1dENvb2tpZXNGb3IoY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJv
b2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICBib29sIGlzUmVtb3ZhbEVu
YWJsZWQgPSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpICE9IEZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lIHx8IHJlc291cmNlU3RhdGlzdGljLmlzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWw7CisgICAgYm9vbCBpc1Jlc291cmNlR3JhbmRm
YXRoZXJlZCA9IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VTdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZDsKKworICAgIE9wZXJhdGluZ0RhdGVzV2luZG93IHdpbmRvdyB7IH07
CisgICAgc3dpdGNoIChmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpKSB7CisgICAg
Y2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczoKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZTo6Tm9uZToKKyAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzTGl2ZU9uVGVzdGluZ1RpbWVvdXQ6CisgICAgICAgIHdpbmRvdyA9
IE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVz
UmVwcm9UZXN0aW5nVGltZW91dDoKKyAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5k
b3c6OkZvclJlcHJvVGVzdGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gaXNSZW1vdmFsRW5hYmxl
ZCAmJiAhaXNSZXNvdXJjZUdyYW5kZmF0aGVyZWQgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVz
ZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYywgd2luZG93KTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihE
b21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0
aGVyaW5nKQoreworICAgIGlmICgoIWlzU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQo
KSAmJiAhc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4ocmVzb3Vy
Y2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICB8fCAoc2hvdWxkQ2hlY2tG
b3JHcmFuZGZhdGhlcmluZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgPiBwYXJhbWV0
ZXJzKCkubWluaW11bVRvcEZyYW1lUmVkaXJlY3RzRm9yU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dCkgeworICAgICAgICBjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIFtd
IHsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0
aWMpCit7CisgICAgaWYgKHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWU7Cit9CisKK1JlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRh
Rm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9EZWxl
dGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hv
dWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYm
IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKKworICAgIGlmIChzaG91bGRDbGVhckdy
YW5kZmF0aGVyaW5nKQorICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAo
KTsKKworICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgIGF1dG8gb2xkZXN0VXNl
ckludGVyYWN0aW9uID0gbm93OworICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0
cmljdFdlYnNpdGVEYXRhRm9yIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKKworICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgVmVj
dG9yPERvbWFpbkRhdGE+IGRvbWFpbnMgPSB0aGlzLT5kb21haW5zKCk7CisgICAgVmVjdG9yPHVu
c2lnbmVkPiBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmc7CisgICAgZm9yIChhdXRvJiBz
dGF0aXN0aWMgOiBkb21haW5zKSB7CisgICAgICAgIGlmIChzaG91bGRFeGVtcHRGcm9tV2Vic2l0
ZURhdGFEZWxldGlvbihzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ID0gdGhpcy0+bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoc3RhdGlzdGljKSkKKyAgICAg
ICAgICAgIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRlcmFj
dGlvbiwgKm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFuZGZh
dGhlcmluZykpIHsKKyAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9E
ZWxldGVBbGxDb29raWVzRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwor
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNv
b2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUFsbEJ1dENvb2tp
ZXNGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAg
ICAgICAgICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHN0
YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihzdGF0aXN0aWMsIHNob3Vs
ZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgdG9EZWxldGVPclJl
c3RyaWN0Rm9yLmRvbWFpbnNUb0VuZm9yY2VTYW1lU2l0ZVN0cmljdEZvci5hcHBlbmQoc3RhdGlz
dGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKKworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk8oSVRQRGVidWcsICJTY2hlZHVsZWQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiB0byBoYXZl
IGl0cyBjb29raWVzIHNldCB0byBTYW1lU2l0ZT1zdHJpY3QuIiwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBk
ZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNz
YWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIlNjaGVkdWxlZCAnIiwgc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpLCAiJyB0byBoYXZlIGl0cyBjb29raWVzIHNldCB0byBTYW1l
U2l0ZT1zdHJpY3QnLiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgJiYgc3RhdGlzdGlj
LmdyYW5kZmF0aGVyZWQpCisgICAgICAgICAgICBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJp
bmcuYXBwZW5kKHN0YXRpc3RpYy5kb21haW5JRCk7CisgICAgfQorCisgICAgLy8gR2l2ZSB0aGUg
dXNlciBlbm91Z2ggdGltZSB0byBpbnRlcmFjdCB3aXRoIHdlYnNpdGVzIHVudGlsIHdlIHJlbW92
ZSBub24tY29va2llIHdlYnNpdGUgZGF0YS4KKyAgICBpZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5p
bmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA8IHBhcmFtZXRlcnMoKS5taW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpCisgICAgICAgIHRvRGVsZXRlT3JSZXN0
cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5jbGVhcigp
OworCisgICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xlYXJHcmFu
ZGZhdGhlcmluZykpOworICAgIAorICAgIHJldHVybiB0b0RlbGV0ZU9yUmVzdHJpY3RGb3I7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0
ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNvdW50
UXVlcnksICJwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgY291bnQgPSBzY29wZWRTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKKworICAgIGlmIChjb3VudCA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGlj
c0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1
bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisK
KyAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gcGFyYW1ldGVycygpLnBydW5l
RW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBhdXRv
IHJlY29yZHNUb1BydW5lID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBp
c1ByZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyJfcyk7CisgICAgaWYgKCFyZWNvcmRzVG9QcnVu
ZSB8fCByZWNvcmRzVG9QcnVuZS0+YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAgICB3
aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRy
aWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7CisKKyAgICBh
dXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKKworICAgIGF1dG8g
cHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5n
KCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RU
b1BydW5lLCAiKSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQsIHVwZGF0ZUxhc3RTZWVuUXVlcnksICJ1cGRh
dGVMYXN0U2VlbiJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDEsIGxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRl
eHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVw
ZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TGFzdFNlZW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHVwZGF0ZUxhc3RTZWVuKGRvbWFpbiwgV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKHNlY29uZHMuc2Vjb25kcygpKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHNob3Vs
ZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Cisg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNv
dXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OlZlcnlIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
LCBpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQsIHVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFF1ZXJ5
LCAidXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVu
dAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1Jl
bW92ZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBzdWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZy
YW1lRG9tYWluKQoreworICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7
CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBh
dXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOworICAgIAorICAg
IGlmICghc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZUNvdW50IHx8ICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBwcmVwYXJlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291
bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBk
b21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZy
YW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZh
bHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgy
LCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1l
Q291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmNv
bHVtbkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5jb2x1bW5J
bnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5jb2x1bW5JbnQoMCkg
PT0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZEJvb2xlYW4oU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCBmbGFnKQoreworICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgICAgIiwgbGFiZWwsICI6ICIsIGZsYWcgPyAiWWVzIiA6ICJObyIpOworfQorCitzdGF0
aWMgdm9pZCBhcHBlbmROZXh0RW50cnkoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3Ry
aW5nJiBlbnRyeSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICAgICAiLCBlbnRyeSwgJ1xu
Jyk7Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0
cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0ZW1lbnQs
IGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFp
bklEIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklELiBTdGF0ZW1lbnQgZmFpbGVkIHRv
IHByZXBhcmUgb3IgYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29w
ZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHQgPSBtX2Rv
bWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitBU0NJSUxpdGVyYWwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
IGNvbnN0Cit7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wTGV2ZWxEb21haW5JRCBmcm9t
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iX3M7
CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyIpCisgICAg
ICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09ICJU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCBmcm9t
RG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9t
YWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbSIpCisgICAgICAgIHJldHVybiAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyJfczsKKyAgICBpZiAo
dGFibGVOYW1lID09ICJUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIikKKyAgICAgICAg
cmV0dXJuICJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCBmcm9tIFRvcEZyYW1lTG9hZGVkVGhp
cmRQYXJ0eVNjcmlwdHMgV0hFUkUgdG9wRnJhbWVEb21haW5JRCA9ID8iX3M7CisgICAgaWYgKHRh
YmxlTmFtZSA9PSAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJldHVy
biAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgZnJvbSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiKQorICAgICAgICByZXR1cm4gIlNFTEVD
VCB0b3BGcmFtZURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09ICJT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9E
b21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3Vy
Y2VEb21haW5JRCA9ID8iX3M7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZy
b20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJFIHN1YnJlc291cmNlRG9tYWlu
SUQgPSA/Il9zOworICAgIAorICAgIHJldHVybiAiIl9zOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNv
bnN0Cit7CisgICAgYXV0byBxdWVyeSA9IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5h
bWUpOworICAgIAorICAgIGlmICghcXVlcnkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBhdXRvIGRhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwor
ICAgIAorICAgIGlmICghZGF0YSB8fCBkYXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qu
IFN0YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoZGF0YS0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICIsIHRhYmxlTmFtZSwgIjpcbiIpOworICAgIAor
ICAgIGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmNvbHVt
bkludCgwKSk7CisgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CisgICAgCisg
ICAgd2hpbGUgKGRhdGEtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdCA9
IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5jb2x1bW5JbnQoMCkpOworICAgICAg
ICBhcHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihXVEY6OlNlY29uZHMgaW50ZXJhY3Rpb25U
aW1lU2Vjb25kcykKIHsKLSAgICBkb3VibGUgbXMgPSB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
bWlsbGlzZWNvbmRzKCk7Ci0gICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IHll
YXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgIGludCBtb250aCA9IG1vbnRoRnJvbURh
eUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLSAgICBpbnQgbW9udGhEYXkgPSBk
YXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLSAgICBy
ZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworICAgIHJldHVy
biBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGltZTo6bm93KCku
c2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAyNF9oOwogfQog
Ci1PcGVyYXRpbmdEYXRlIE9wZXJhdGluZ0RhdGU6OnRvZGF5KCkKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIs
IGNvbnN0IFN0cmluZyYgZG9tYWluKSBjb25zdAogewotICAgIHJldHVybiBPcGVyYXRpbmdEYXRl
Ojpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0
YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lUXVlcnksICJyZXNvdXJjZVRvU3Ry
aW5nIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0Vf
TE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlc291cmNlVG9TdHJpbmcuIFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCBvciBkb21haW4gd2Fz
IG5vdCBmb3VuZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVnaXN0cmFi
bGUgZG9tYWluOiAiLCBkb21haW4sICdcbicpOworICAgIAorICAgIC8vIFVzZXIgaW50ZXJhY3Rp
b24KKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJoYWRVc2VySW50ZXJhY3Rpb24iLCBtX2dl
dFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KEhhZFVzZXJJbnRl
cmFjdGlvbkluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYnVpbGRlci5h
cHBlbmQoIiAgICBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBpZiAoaGFzSGFk
UmVjZW50VXNlckludGVyYWN0aW9uKFNlY29uZHMobV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5h
bWVTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUlu
ZGV4KSkpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgid2l0aGluIDI0IGhvdXJzIik7CisgICAg
ZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgn
XG4nKTsKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJncmFuZGZhdGhlcmVkIiwgbV9nZXRS
ZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChHcmFuZGZhdGhlcmVk
SW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKworICAgIC8vIFN0b3JhZ2UgYWNj
ZXNzCisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3RvcmFnZUFjY2Vzc1Vu
ZGVyVG9wRnJhbWVEb21haW5zIiwgZG9tYWluKTsKKworICAgIC8vIFRvcCBmcmFtZSBzdGF0cwor
ICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8iLCBkb21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQiLCBk
b21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChi
dWlsZGVyLCAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIiwgZG9tYWluKTsKKyAgICBhcHBl
bmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzIiwgZG9tYWluKTsKKworICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgIklzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVN0YXRlbWVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWxJbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworCisgICAgLy8gU3ViZnJhbWUg
c3RhdHMKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIiwgZG9tYWluKTsKKworICAgIC8vIFN1YnJlc291cmNlIHN0YXRzCisg
ICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVy
LCAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsIGRvbWFpbik7CisgICAgYXBwZW5kU3Vi
U3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIiwg
ZG9tYWluKTsKKworICAgIC8vIFByZXZhbGVudCBSZXNvdXJjZQorICAgIGFwcGVuZEJvb2xlYW4o
YnVpbGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWlu
TmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzUHJldmFsZW50SW5kZXgpKTsKKyAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgiICAgIGRhdGFSZWNvcmRzUmVtb3ZlZDogIiwgbV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChEYXRhUmVjb3Jkc1JlbW92
ZWRJbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogfQogCi1TZWNvbmRzIE9wZXJh
dGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQogewot
ICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwg
bV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07CisgICAgYXV0byBzY29wZWRMaW5rRGVjb3Jh
dGlvbkV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2xpbmtEZWNvcmF0
aW9uRXhpc3RzU3RhdGVtZW50LCBsaW5rRGVjb3JhdGlvbkV4aXN0c1F1ZXJ5LCAiZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlIl9zKTsKKyAgICBhdXRvIHNjb3BlZFNjcmlwdExvYWRFeGlzdHNTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50
LCBzY3JpcHRMb2FkRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UgbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIGF1dG8gc2NvcGVkU3ViRnJhbWVFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJGcmFtZUV4aXN0c1N0YXRl
bWVudCwgc3ViRnJhbWVFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBzdWJG
cmFtZUV4aXN0c1N0YXRlbWVudCJfcyk7CisgICAgYXV0byBzY29wZWRTdWJSZXNvdXJjZUV4aXN0
c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YlJlc291cmNlRXhpc3RzU3Rh
dGVtZW50LCBzdWJSZXNvdXJjZUV4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
IHN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICBhdXRvIHNjb3BlZFVuaXF1ZVJl
ZGlyZWN0RXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQsIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnksICJkb21haW5J
REV4aXN0c0luRGF0YWJhc2UgdW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQiX3MpOworICAg
IGF1dG8gc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LCBvYnNlcnZlZERvbWFp
bnNFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBvYnNlcnZlZERvbWFpbnNF
eGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIAorICAgIGlmICghc2NvcGVkTGlua0RlY29yYXRpb25F
eGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgIXNjb3BlZFNjcmlwdExvYWRFeGlzdHNTdGF0ZW1l
bnQKKyAgICAgICAgfHwgIXNjb3BlZFN1YkZyYW1lRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8
ICFzY29wZWRTdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudAorICAgICAgICB8fCAhc2NvcGVkVW5p
cXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgIXNjb3BlZE9ic2VydmVkRG9t
YWluc0V4aXN0c1N0YXRlbWVudAorICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9s
aW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+YmluZEludCgx
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
c3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFp
bklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVu
dC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViUmVz
b3VyY2VFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
b2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFz
ZSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwg
bV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAg
ICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAg
ICAgICB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VworICAgICAgICB8fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVworICAgICAgICB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhp
c3RzSW5EYXRhYmFzZSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1f
c2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlz
dHNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50
LT5jb2x1bW5JbnQoMCkgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1u
SW50KDApIHx8IG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7
CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRl
JiBvdGhlcikgY29uc3QKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVP
cGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIHJldHVybiBtX21vbnRoRGF5ID09IG90
aGVyLm1fbW9udGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRoICYmIG1feWVhciA9PSBv
dGhlci5tX3llYXI7CisgICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKKworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vcGVy
YXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5jb2x1bW5JbnQo
MCk7CisKKyAgICBpZiAoIWdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IHx8IGdl
dE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdl
dEZpcnN0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgyKSk7CisKKyAgICBpZiAoIWdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCBk
dXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAx
KQorICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRl
c1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJl
IGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0Rh
dGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVt
bkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDEpLCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworICAgIH0KKwor
ICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcg
LSAxKQorICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gc3RkOjpudWxsb3B0Owor
ICAgIGVsc2UgeworICAgICAgICBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5yZXNl
dCgpOworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+YmluZElu
dCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJh
bWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0
aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBP
cGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgw
KSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDEpLCBnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworICAgIH0KIH0KIAotYm9v
bCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkoKQogewotICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgp
IDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBhdXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAg
ICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPiAwKSB7CisgICAgICAgIGlmICh0b2RheSA8PSBt
X21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgaW50IHJvd3NUb1BydW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRp
bmdEYXRlc1dpbmRvd0xvbmcgKyAxOworICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKKyAgICAg
ICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZ
IHllYXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRl
TGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVM
ZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFz
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAo
eWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAgIGlmICghaW5z
ZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5iaW5kSW50KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgdG9kYXkubW9udGgo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkg
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdXBkYXRlT3Bl
cmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0
b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNX
aW5kb3cpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIHN3aXRjaCAob3BlcmF0aW5nRGF0ZXNXaW5kb3cpIHsKKyAgICBjYXNlIE9wZXJhdGluZ0Rh
dGVzV2luZG93OjpMb25nOgorICAgICAgICBpZiAobV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSAm
JiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUpIDwgKm1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6U2hvcnQ6
CisgICAgICAgIGlmIChtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSAmJiBPcGVyYXRpbmdEYXRl
Ojpmcm9tV2FsbFRpbWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgKm1fc2hvcnRX
aW5kb3dPcGVyYXRpbmdEYXRlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rpbmc6Cisg
ICAgICAgIHJldHVybiBXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIG9wZXJhdGluZ1RpbWVXaW5kb3dGb3JMaXZlT25UZXN0aW5nOworICAgIGNhc2UgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6OkZvclJlcHJvVGVzdGluZzoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gSWYgd2UgZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3Ig
YW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRl
ciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5nKS4KKyAgICBpZiAodGhpcy0+cGFyYW1l
dGVycygpLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgaWYgKFdhbGxUaW1l
Ojpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgdGhpcy0+cGFyYW1ldGVy
cygpLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFN1c3BlbmRhYmxlV29ya1F1ZXVlJiB3b3JrUXVldWUsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Qgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCkKLSAgICA6IG1fc3Rv
cmUoc3RvcmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgLCBtX3Nob3VsZElu
Y2x1ZGVMb2NhbGhvc3Qoc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCkKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQ
YXNzZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCiB7Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgLy8gUG9wdWxhdGUgdGhlIE9wZXJhdGluZyBEYXRlcyB0YWJs
ZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmluZy4KKyAgICBkb3VibGUgZGF5c0Fn
b0luU2Vjb25kcyA9IDA7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVt
YmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKKyAgICAgICAgZG91YmxlIGRheXNUb1N1
YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKKyAgICAgICAgZGF5
c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkgLSBkYXlzVG9TdWJ0cmFjdDsKKyAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRp
bmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNl
Y29uZHMpKTsKKworICAgICAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRp
bmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAg
ICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMywgZGF0ZVRv
SW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorCisgICAgdXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CisKKyAgICAvLyBNYWtlIHN1cmUgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgaXMgdGhlIGxlYXN0IHJlY2VudCBvZiBhbGwgZW50cmllcy4KKyAgICBk
YXlzQWdvSW5TZWNvbmRzIC09IFNlY29uZHM6OmZyb21Ib3VycygyNCkudmFsdWUoKTsKKyAgICBh
dXRvIHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQsIGluc2VydE9ic2VydmVkRG9t
YWluUXVlcnksICJpbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyJfcyk7CisgICAgaWYg
KHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kVGV4dChSZWdpc3RyYWJs
ZURvbWFpbkluZGV4LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZERvdWJsZShMYXN0U2Vlbklu
ZGV4LCBkYXlzQWdvSW5TZWNvbmRzKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5z
ZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5k
ZXgsIGhhc1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZElu
c2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kRG91YmxlKE1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChHcmFuZGZh
dGhlcmVkSW5kZXgsIGZhbHNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwgaXNQcmV2
YWxlbnQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChEYXRhUmVjb3Jkc1JlbW92ZWRJbmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbkluZGV4LCAwKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQo
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LCAwKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEluZGV4LCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGZhaWxl
ZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzY29wZWRJbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiB9CiAKLVJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSgpCitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGRvbWFp
biA6IGRvbWFpbnMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8g
IiIgOiAiLCAiLCBkb21haW4uc3RyaW5nKCkpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKLXVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29tcHV0ZUlt
cG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
CitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQogewotICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09IDE7Ci0gICAg
aWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIGltcG9y
dGFuY2UgLT0gMjsKLSAgICByZXR1cm4gaW1wb3J0YW5jZTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0
V2Vic2l0ZURhdGFGb3IuZG9tYWluc1RvRGVsZXRlQWxsQ29va2llc0ZvcikKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmco
KSwgIihhbGwgZGF0YSkiKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNv
b2tpZXNGb3IpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCBkb21haW4uc3RyaW5nKCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwor
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVE
YXRhRm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0
cmluZygpLCAiKGFsbCBidXQgY29va2llcykiKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQpAQCAtNDYyLDE4ICszNDk1
LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChj
b25zdCBTdHJpbmcmIGV2ZW50KQogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9y
ZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwpAQCAtNTQyLDYgKzM1NjMsNTE4IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURhdGFEZWxldGlvbihjb25zdCBSZWdpCiAgICAgcmV0
dXJuICFkb21haW4uaXNFbXB0eSgpICYmIChkb21haW4gPT0gbV9zdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4gfHwgbV9hcHBCb3VuZERvbWFpbnMuY29udGFpbnMoZG9tYWluKSk7CiB9CiAKKy8v
IFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCisKK1ByaXZhdGVDbGlja01lYXN1cmVtZW50IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZy
b21EYXRhYmFzZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIHN0YXRlbWVudCwgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUgYXR0cmlidXRpb25UeXBlKQoreworICAgIGF1
dG8gc291cmNlU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChzdGF0ZW1l
bnQtPmNvbHVtbkludCgwKSk7CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW4gPSBnZXRE
b21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAgIGF1
dG8gc291cmNlSUQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCgyKTsKKyAgICBhdXRvIHRpbWVPZkFk
Q2xpY2sgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1
dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg1KSA6IHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDMpOworICAgIGF1dG8gdG9rZW4gPSBhdHRyaWJ1dGlvblR5cGUg
PT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBz
dGF0ZW1lbnQtPmNvbHVtblRleHQoNykgOiBzdGF0ZW1lbnQtPmNvbHVtblRleHQoNCk7CisgICAg
YXV0byBzaWduYXR1cmUgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtblRleHQoOCkg
OiBzdGF0ZW1lbnQtPmNvbHVtblRleHQoNSk7CisgICAgYXV0byBrZXlJRCA9IGF0dHJpYnV0aW9u
VHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRl
ZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg5KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg2KTsK
KworICAgIFByaXZhdGVDbGlja01lYXN1cmVtZW50IGF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VJRChzb3VyY2VJRCksIFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc291cmNlU2l0ZURvbWFpbikpLCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUo
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhkZXN0aW5hdGlvblNpdGVEb21haW4pKSwgeyB9LCB7IH0sIFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyh0aW1lT2ZBZENsaWNrKSk7CisgICAgCisgICAgaWYgKGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkgewor
ICAgICAgICBhdXRvIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgPSBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKTsKKyAgICAgICAgYXV0byBwcmlvcml0eSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDQpOwor
ICAgICAgICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoNik7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEwKTsKKworICAgICAgICBpZiAoYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uLnNldEF0
dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRy
aWdnZXJEYXRhIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEp
LCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UHJpb3JpdHkocHJpb3JpdHkpIH0p
OworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHNvdXJjZUVhcmxpZXN0VGltZVRv
U2VuZDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gZGVzdGluYXRpb25FYXJsaWVz
dFRpbWVUb1NlbmQ7CisgICAgICAgIAorICAgICAgICAvLyBBIHZhbHVlIG9mIDAuMCBpbmRpY2F0
ZXMgdGhhdCB0aGUgcmVwb3J0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHJlc3BlY3RpdmUgc2l0ZS4K
KyAgICAgICAgaWYgKHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID4gMC4wKQorICAgICAg
ICAgICAgc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlKTsKKworICAgICAgICBpZiAoZGVzdGluYXRp
b25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSA+IDAuMCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kVmFsdWUpOworCisgICAgICAgIGF0dHJpYnV0aW9uLnNldFRpbWVz
VG9TZW5kKHsgc291cmNlRWFybGllc3RUaW1lVG9TZW5kLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGlt
ZVRvU2VuZCB9KTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGlvbi5zZXRTb3VyY2VTZWNyZXRUb2tl
bih7IHRva2VuLCBzaWduYXR1cmUsIGtleUlEIH0pOworCisgICAgcmV0dXJuIGF0dHJpYnV0aW9u
OworfQorCitzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudD4sIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50Pj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNpdGUm
IHNvdXJjZVNpdGUsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYgZGVzdGluYXRpb25TaXRlKQoreworICAgIGF1dG8gc291
cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoc291cmNlU2l0ZS5yZWdpc3RyYWJsZURvbWFpbik7
CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRvbWFpbklEKGRlc3RpbmF0aW9u
U2l0ZS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZVNpdGVEb21haW5JRCB8
fCAhZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBhdXRvIGZpbmRVbmF0dHJpYnV0
ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9maW5kVW5hdHRyaWJ1
dGVkU3RhdGVtZW50LCBmaW5kVW5hdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQiX3MpOworICAgIGlmICghZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpz
b3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBmaW5kVW5hdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQsIGZpbmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpOworICAgIGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwg
ZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21h
aW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgZmluZEF0
dHJpYnV0ZWRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudD4gdW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7CisgICAgaWYg
KGZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IGJ1aWxkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRGcm9tRGF0YWJhc2UoZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudD4gYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50OworICAgIGlmIChmaW5k
QXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAg
IGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IGJ1aWxkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRGcm9tRGF0YWJhc2UoZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCks
IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKKwor
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCwgYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFBy
aXZhdGVDbGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gc291
cmNlRGF0YSA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGF0
dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgYXV0byBhdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uRGF0YSA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9t
YWluKTsKKworICAgIGlmICghc291cmNlRGF0YS5zZWNvbmQgfHwgIWF0dHJpYnV0aW9uRGVzdGlu
YXRpb25EYXRhLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc291cmNlVW5s
aW5rYWJsZVRva2VuID0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCk7CisgICAg
aWYgKGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZTo6QXR0cmlidXRlZCkgeworICAgICAgICBhdXRvIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEg
PSBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkgPyBhdHRyaWJ1dGlvbi5hdHRy
aWJ1dGlvblRyaWdnZXJEYXRhKCkudmFsdWUoKS5kYXRhIDogLTE7CisgICAgICAgIGF1dG8gcHJp
b3JpdHkgPSBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkgPyBhdHRyaWJ1dGlv
bi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkudmFsdWUoKS5wcmlvcml0eSA6IC0xOworICAgICAg
ICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IGF0dHJpYnV0aW9uLnRpbWVzVG9TZW5k
KCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5z
b3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQudmFsdWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkgOiAtMTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IGF0
dHJpYnV0aW9uLnRpbWVzVG9TZW5kKCkuZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPyBh
dHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kLnZh
bHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDogLTE7CisKKyAgICAgICAgLy8gV2Ug
c2hvdWxkIG5ldmVyIGJlIGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHByaXZhdGUgY2xpY2sgbWVh
c3VyZW1lbnQgdmFsdWUgaW50byB0aGUgZGF0YWJhc2Ugd2l0aG91dCB2YWxpZCByZXBvcnQgdGlt
ZXMuCisgICAgICAgIEFTU0VSVChzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEgJiYgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEpOworCisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRl
c3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRh
dGEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDUsIHBy
aW9yaXR5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJs
ZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg3
LCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxp
bmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDksIHNvdXJjZVVubGlua2FibGVU
b2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlT
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEwLCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlE
QmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
dGF0ZW1lbnQtPmJpbmREb3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRRdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRl
bWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNv
dXJjZUlEKCkuaWQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3Vi
bGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNSwgc291
cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVS
TCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+
c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXNFeHBpcmVkRm9yVGVzdGluZygpCit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZFN0YXRlbWVudCwgc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBc0V4cGlyZWRRdWVyeSwgIm1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmciX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFz
RXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
bW92ZVVuYXR0cmlidXRlZChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYgYXR0cmlidXRpb24pCit7
CisgICAgYXV0byBzb3VyY2VTaXRlRG9tYWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5zb3Vy
Y2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9t
YWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3RyYWJs
ZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZVNpdGVEb21haW5JRCB8fCAhZGVzdGluYXRpb25T
aXRlRG9tYWluSUQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCwgcmVtb3ZlVW5hdHRyaWJ1dGVkUXVlcnksICJyZW1vdmVVbmF0dHJpYnV0ZWQiX3MpOworCisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZVVuYXR0cmlidXRlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGQ6Om9wdGlv
bmFsPFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNlbmRE
YXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVDbGlja01l
YXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJpYnV0aW9u
RGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEm
JiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQoreworICAgIC8vIFdlIHNob3VsZCBhbHdheXMgY2xl
YXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxpbmcgYW4g
YXR0cmlidXRpb24uCisgICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKTsK
KworICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBhdHRyaWJ1
dGlvbi4iKTsKKyAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJb
UHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRpb24uIl9z
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKKyAgICBhdXRvIHByaW9y
aXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKKworICAgIGlmIChVTkxJS0VM
WShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1dGlvbiB0
cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIsIGRhdGEs
IHByaW9yaXR5KTsKKyAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtl
U3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0aW9uIHdp
dGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6
ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKKyAgICB9CisKKyAgICBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50aWxTZW5k
IHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKKworICAgIGF1dG8gYXR0cmlidXRpb24g
PSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRpb25TaXRl
KTsKKyAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24uZmlyc3Q7
CisgICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNvbmQ7CisK
KyAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgeworICAgICAgICAvLyBBbHdheXMgY29u
dmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXR0
cmlidXRlZCBtYXAuCisgICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNseVVuYXR0
cmlidXRlZCk7CisgICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5hdHRyaWJ1
dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1vdmUoYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSkpOworCisgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgaGF2
ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVuYXR0cmli
dXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1dGlvbiB3
aXRoIGEgaGlnaGVyIHByaW9yaXR5LgorICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNlbmQuaGFz
VmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVydGVkIGEg
c3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1YmxpY311
IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7CisgICAgICAgICAg
ICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2YXRlIENs
aWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJfcywgcHJp
b3JpdHksICInLiJfcykpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
cHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhpZ2hlciBw
cmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCisgICAgICAgIGlmICghcHJldmlv
dXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhhc0hpZ2hl
clByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7CisgICAgICAgICAgICBpbnNl
cnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRyaWJ1dGVk
KSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwor
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJSZXBs
YWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGgg
YXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUgYmVj
YXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFk
IGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9z
LCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNlIGl0IGhh
ZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUg
bm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVzcGVjdCB0
aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKKyAgICAgICAgLy8g
bm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0LgorICAg
ICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNseUJlZW5S
ZXBvcnRlZCgpKSB7CisgICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91
c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRvU2VuZChX
VEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKKyAgICAgICAgICAgIGlmICghc2Vjb25k
c1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBpbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKKworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVkIGFuIGFk
IGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdoZXIgcHJp
b3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOworICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1l
c3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRd
IFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0aW9u
IHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlvcml0
eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5oYXNWYWxp
ZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOworfQorCitWZWN0b3I8V2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZWRT
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyJfcyk7CisK
KyAgICBpZiAoIWF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQpIHsKKyAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYXR0cmlidXRpb25z
OworICAgIHdoaWxlIChhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgYXR0cmlidXRpb25zLmFwcGVuZChidWlsZFByaXZhdGVDbGlja01lYXN1
cmVtZW50RnJvbURhdGFiYXNlKGF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSk7CisKKyAgICBy
ZXR1cm4gYXR0cmlidXRpb25zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxl
RG9tYWluPiBkb21haW4pCit7CisgICAgLy8gRGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBp
ZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgorICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUi
OworICAgIGlmIChkb21haW4pIHsKKyAgICAgICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21h
aW5JRCgqZG9tYWluKTsKKyAgICAgICAgaWYgKCFkb21haW5JRFRvTWF0Y2gpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYmluZFBhcmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21h
aW5JRFRvTWF0Y2gpOworICAgIH0KKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3Mp
OworCisgICAgaWYgKCFjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudAorICAgICAgICB8
fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFt
ZXRlcikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFyYW1ldGVyKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBj
bGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0byBjbGVhckF0dHJpYnV0ZWRT
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9jbGVhckF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSwgImNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwor
CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xl
YXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBiaW5kUGFyYW1ldGVyKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBiaW5kUGFyYW1ldGVyKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgY2xlYXJBdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpj
bGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCit7CisgICAgYXV0byBleHBpcmF0
aW9uVGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6Om1heEFnZSgpOworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1l
bnQsIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGly
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7CisKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVu
dAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRp
bWVGcmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworU3RyaW5n
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQqIHN0YXRlbWVudCwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGUgYXR0cmlidXRpb25UeXBlKQoreworICAgIGF1dG8gc291cmNlU2l0ZURvbWFp
biA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAgIGF1dG8gc291cmNlSUQgPSBzdGF0
ZW1lbnQtPmNvbHVtbkludCgyKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiU291cmNlIHNpdGU6ICIsIHNvdXJjZVNpdGVEb21haW4sICJcbkF0dHJp
YnV0ZSBvbiBzaXRlOiAiLCBkZXN0aW5hdGlvblNpdGVEb21haW4sICJcblNvdXJjZSBJRDogIiwg
c291cmNlSUQpOworCisgICAgaWYgKGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkgeworICAgICAgICBhdXRvIGF0dHJp
YnV0aW9uVHJpZ2dlckRhdGEgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCgzKTsKKyAgICAgICAgYXV0
byBwcmlvcml0eSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDQpOworICAgICAgICBhdXRvIGVhcmxp
ZXN0VGltZVRvU2VuZCA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDYpOworCisgICAgICAgIGlmIChh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0xKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5BdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICIsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEs
ICJcbkF0dHJpYnV0aW9uIHByaW9yaXR5OiAiLCBwcmlvcml0eSwgIlxuQXR0cmlidXRpb24gZWFy
bGllc3QgdGltZSB0byBzZW5kOiAiKTsKKyAgICAgICAgICAgIGlmIChlYXJsaWVzdFRpbWVUb1Nl
bmQgPT0gLTEpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIk5vdCBzZXQiKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kc1VudGlsU2VuZCA9
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlYXJsaWVzdFRpbWVUb1NlbmQpIC0gV2FsbFRpbWU6
Om5vdygpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChzZWNvbmRzVW50aWxTZW5k
ID49IDI0X2ggJiYgc2Vjb25kc1VudGlsU2VuZCA8PSA0OF9oKSA/ICJXaXRoaW4gMjQtNDggaG91
cnMiIDogIk91dHNpZGUgMjQtNDggaG91cnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2Vy
IGRhdGEuIik7CisgICAgfSBlbHNlCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbk5vIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YS4iKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKworICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcoKQoreworICAgIGF1
dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBpZiAoIXByaXZh
dGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRUb1N0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlm
ICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5jb2x1bW5JbnQoMCkgJiYgIXBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Y29sdW1uSW50KDEpKQorICAgICAgICBy
ZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfczsK
KworICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlv
bnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmli
dXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKKworICAg
IGlmICghdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50KSB7CisgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB1bmF0dHJpYnV0
ZWROdW1iZXIgPSAwOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICB3aGlsZSAodW5h
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAg
ICBjb25zdCBjaGFyKiBwcmVmaXggPSB1bmF0dHJpYnV0ZWROdW1iZXIgPyAiIiA6ICJVbmF0dHJp
YnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudHM6IjsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQocHJlZml4LCAiXG5XZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAiLCArK3VuYXR0
cmlidXRlZE51bWJlciwgJ1xuJywKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uVG9TdHJpbmcodW5h
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0
dHJpYnV0aW9uVHlwZTo6VW5hdHRyaWJ1dGVkKSk7CisgICAgfQorCisgICAgYXV0byBhdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBhbGxBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSwgInByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmciX3Mp
OworCisgICAgaWYgKCFhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50KSB7CisgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVkTnVtYmVyID0gMDsKKyAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIi
LCAiQXR0cmlidXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRy
aWJ1dGVkTnVtYmVyICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAorICAgICAgICAgICAgYXR0
cmlidXRpb25Ub1N0cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitzdGQ6OnBhaXI8c3RkOjpvcHRpb25h
bDxTb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFy
bGllc3RUaW1lVG9TZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplYXJsaWVzdFRp
bWVzVG9TZW5kKGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1
dGlvbikKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0
aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgYXV0byBkZXN0aW5hdGlv
blNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJl
Z2lzdHJhYmxlRG9tYWluKTsKKworICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0
aW5hdGlvblNpdGVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN0ZDo6
bnVsbG9wdCwgc3RkOjpudWxsb3B0KTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCwgZWFybGll
c3RUaW1lc1RvU2VuZFF1ZXJ5LCAiZWFybGllc3RUaW1lc1RvU2VuZCJfcyk7CisKKyAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmVhcmxpZXN0VGltZXNUb1NlbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RS
SU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxTb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmQ+IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25FYXJsaWVzdFRpbWVUb1NlbmQ+IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb247
CisgICAgCisgICAgLy8gQSB2YWx1ZSBvZiAwLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcG9ydCBo
YXMgYmVlbiBzZW50IHRvIHRoZSByZXNwZWN0aXZlIHNpdGUuCisgICAgaWYgKHNjb3BlZFN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDApID4gMC4wKQorICAgICAgICBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZSA9IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDApOworICAgIAorICAgIGlm
IChzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgxKSA+IDAuMCkKKyAgICAgICAgZWFybGll
c3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91Ymxl
KDEpOworICAgIAorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbik7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoU291cmNl
RG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQoreworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVtZW50LCBtYXJrUmVw
b3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1NvdXJjZSJfcyk7CisK
KyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uKFNvdXJjZURvbWFpbklEIHNv
dXJjZVNpdGVEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCkKK3sKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX21hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LCBtYXJrUmVwb3J0QXNT
ZW50VG9EZXN0aW5hdGlvblF1ZXJ5LCAibWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24iX3Mp
OworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsIHNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50IGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpCit7Cisg
ICAgYXV0byB0aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwor
ICAgIGF1dG8gc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Cisg
ICAgYXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29u
ZDsKKworICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOworCisgICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGF0dHJpYnV0
aW9uUmVwb3J0RW5kcG9pbnQpIHsKKyAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50OjpTb3VyY2U6CisgICAgICAgIGlmICghc291cmNlRWFy
bGllc3RUaW1lVG9TZW5kKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoKnNvdXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKKyAg
ICAgICAgc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9y
dEVuZHBvaW50OjpEZXN0aW5hdGlvbjoKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0
VGltZVRvU2VuZCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGlu
YXRpb24oKnNvdXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKKyAg
ICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1
bmxlc3MgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5h
dGlvbiBzaXRlLgorICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3Vy
Y2VFYXJsaWVzdFRpbWVUb1NlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURv
bWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAo
IWNsZWFyQXR0cmlidXRlZFN0YXRlbWVudAorICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25T
aXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJTZW50QXR0cmlidXRpb24gZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBp
cmVkRm9yVGVzdGluZygpCit7CisgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1l
Ojpub3coKSAtIDFfaDsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJj
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2Ug
PSA/Il9zKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBu
dWxsIl9zKTsKKworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQK
KyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0F0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwgZWFybGllc3RUaW1lVG9T
ZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0Fz
RXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworU2NvcGVFeGl0PEZ1bmN0aW9uPHZvaWQoKT4+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAobV90cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybiBtYWtlU2Nv
cGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbXSB7IH0gfSk7CisKKyAgICBtX3RyYW5zYWN0aW9u
LmJlZ2luKCk7CisgICAgcmV0dXJuIG1ha2VTY29wZUV4aXQoRnVuY3Rpb248dm9pZCgpPiB7IFt0
aGlzXSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgfSB9KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyN1bmRlZiBJVFBfUkVMRUFTRV9MT0cKKyN1bmRlZiBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgKaW5kZXggMjQyMmZjODRmNTRlZTdjZDMwZWU0MGYxNDIwNDJkNDFlYmY1
MWIzZi4uYzY4NjkyMGY0NjM0NmE2ZDhjNTRlMGZjNDQ4NGI2MTJlZTE2ZWNkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjIgKzI3LDI1IEBACiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJPcGVyYXRpbmdEYXRlLmgiCiAjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlkZW50aWZpZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgor
I2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQogI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCIKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBLZXllZERlY29kZXI7Ci1jbGFzcyBLZXllZEVuY29kZXI7
CitjbGFzcyBTUUxpdGVEYXRhYmFzZTsKK2NsYXNzIFNRTGl0ZVN0YXRlbWVudDsKIGVudW0gY2xh
c3MgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQgOiBib29sOwogc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7
CkBAIC01MCwxOTAgKzUzLDE1MiBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAg
IE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgc3RhdGljIE9wZXJhdGluZ0Rh
dGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lKTsKLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSB0b2Rh
eSgpOwotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdDsKLSAgICBpbnQgeWVh
cigpIGNvbnN0IHsgcmV0dXJuIG1feWVhcjsgfQotICAgIGludCBtb250aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9udGg7IH0KLSAgICBpbnQgbW9udGhEYXkoKSBjb25zdCB7IHJldHVybiBtX21vbnRo
RGF5OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIp
IGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBj
b25zdDsKLSAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0OwotICAgIAotICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQotICAgICAgICA6IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9udGgobW9udGgp
Ci0gICAgICAgICwgbV9tb250aERheShtb250aERheSkKLSAgICB7IH0KLQotcHJpdmF0ZToKLSAg
ICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgot
ICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotY29uc3RleHByIHVu
c2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWdu
ZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCB7IDcgfTsKLWNvbnN0ZXhwciBTZWNvbmRzIG9w
ZXJhdGluZ1RpbWVXaW5kb3dGb3JMaXZlT25UZXN0aW5nIHsgMV9oIH07Ci0KLWVudW0gY2xhc3Mg
T3BlcmF0aW5nRGF0ZXNXaW5kb3cgOiB1aW50OF90IHsgTG9uZywgU2hvcnQsIEZvckxpdmVPblRl
c3RpbmcsIEZvclJlcHJvVGVzdGluZyB9OworY2xhc3MgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyOwogZW51bSBjbGFzcyBDb29raWVBY2Nlc3MgOiB1aW50OF90IHsgQ2Fubm90UmVxdWVz
dCwgQmFzZWRPbkNvb2tpZVBvbGljeSwgT25seUlmR3JhbnRlZCB9OwogCitzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkJ1Y2tldHNQZXJTdGF0aXN0aWMgPSA1Oworc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZTdGF0aXN0aWNzID0gNzsKK3N0YXRpYyBjb25zdGV4cHIgc3Rk
OjphcnJheTx1bnNpZ25lZCwgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGljPiBidWNrZXRTaXpl
cyB7eyAxLCAzLCAxMCwgNTAsIDEwMCB9fTsKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0
aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07CitzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsK
KworLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KK3VzaW5nIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OwordXNp
bmcgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgPSBXZWJDb3JlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDsKK3VzaW5nIFNvdXJjZVNpdGUgPSBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZTsKK3VzaW5nIEF0dHJpYnV0aW9uRGVzdGluYXRpb25T
aXRlID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGlu
YXRpb25TaXRlOwordXNpbmcgQXR0cmlidXRpb25UcmlnZ2VyRGF0YSA9IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhOwordXNpbmcgU291cmNl
RWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwordXNpbmcgRGVzdGluYXRpb25FYXJsaWVzdFRp
bWVUb1NlbmQgPSBkb3VibGU7Cit1c2luZyBTb3VyY2VEb21haW5JRCA9IHVuc2lnbmVkOwordXNp
bmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVkOworCit1c2luZyBFeGlzdGluZ0NvbHVt
bnMgPSBWZWN0b3I8U3RyaW5nPjsKK3VzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJp
bmc+OwordXNpbmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwordXNpbmcgRXhwZWN0ZWRD
b2x1bW5OYW1lID0gU3RyaW5nOwordXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFN1YkZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47Cit1c2luZyBTdWJSZXNvdXJjZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluOwordXNpbmcgUmVkaXJlY3REb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47Cit1c2luZyBSZWRpcmVjdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIE5hdmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Cit1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbjsKK3VzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOworCit0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
Pj4gVGFibGVBbmRJbmRleFBhaXI7CisKIC8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8g
dXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mg
c3RhdGlzdGljcyBxdWV1ZS4KIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA6IHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICB1c2luZyBS
ZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
U3ViRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBT
dWJSZXNvdXJjZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IFJlZGlyZWN0RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
UmVkaXJlY3RlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1
c2luZyBSZWRpcmVjdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAg
ICB1c2luZyBOYXZpZ2F0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
Ci0gICAgdXNpbmcgTmF2aWdhdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKLSAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKLSAgICAKLSAgICB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUoKTsKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxo
b3N0LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7
CisgICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0
YSgpIGNvbnN0ID0gMDsKKyAgICBzdGF0aWMgSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUqPiYgYWxsU3RvcmVzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29va2llQmxv
Y2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7Ci0gICAgdm9pZCB1cGRhdGVD
b29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3ImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJC
bG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgaW50ZXJydXB0
KCk7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgdm9pZCBkaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOworICAgIHZvaWQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7CisgICAg
dm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgaW5jbHVk
ZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKIAotICAgIHZvaWQgcHJvY2Vzc1N0
YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN0cmlu
Zz4+IGNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1lcmdl
U3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgPSAwOworICAgIHZv
aWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKTsKKyAg
ICB2b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYpOworICAgIHZvaWQgcmVzb3VyY2VUb1N0cmluZyhTdHJpbmdCdWls
ZGVyJiwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0
b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIgb3BlbmVySUQsIE9wZW5lckRvbWFpbiYmKSA9IDA7Ci0gICAg
dm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdXBk
YXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICB2
b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpOworICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJl
ZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBncmFu
ZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jik7
CiAgICAgdm9pZCBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3QoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVj
dGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBib29sIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzR3JhbmRmYXRo
ZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZv
ckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisgICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRJc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9v
bCB2YWx1ZSk7CisgICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IFNlY29uZHMpOworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0
IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKKyAgICB2b2lkIHNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwor
ICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOworICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihj
b25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21h
aW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdDsKKyAgICB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0
RG9tYWluJik7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBU
b3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7CisgICAgdm9pZCBjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29u
c3QgTmF2aWdhdGVkVG9Eb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IAorICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+
LCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BG
cmFtZURvbWFpbiYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nl
c3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgb3BlbmVySUQsIE9wZW5lckRvbWFpbiYmKTsKKyAgICB2b2lkIGdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZvaWQg
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBi
b29sIGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQs
IGJvb2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpOworICAgIHZvaWQgbG9nQ3Jvc3NT
aXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgY29u
c3QgTmF2aWdhdGVkVG9Eb21haW4mKTsKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBUb3BGcmFtZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9p
ZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyk7CiAKKyAgICB2b2lk
IHNldElzUnVubmluZ1Rlc3QoYm9vbCk7CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhp
bXVtRW50cnlDb3VudCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShib29sKTsKICAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwor
ICAgIGJvb2wgc2hvdWxkU2tpcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAg
IHZvaWQgaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNzZWQsIGJvb2wgaGFzVXNl
ckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGJvb2wgaXNQcmV2YWxlbnQpOworICAgIGJvb2wgaXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKIAogICAg
IHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAg
ICB2b2lkIHNldElzUnVubmluZ1Rlc3QoYm9vbCk7Ci0gICAgYm9vbCBzaG91bGRTa2lwKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CiAgICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKLSAgICB2b2lkIHNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7CisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzKCk7CisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygp
OworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwor
ICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OworICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7CisgICAgYm9vbCBz
aG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRXhlbXB0RnJv
bVdlYnNpdGVEYXRhRGVsZXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKICAg
ICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsK
LSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9k
ZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9p
ZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpOwotICAgIHZvaWQgc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIG1vZGUpIHsgbV90aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlID0gbW9kZTsgfTsKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Ro
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7IH07Ci0gICAgdm9pZCBzZXRTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZChXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCBlbmFibGVkKSB7IG1fc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBlbmFi
bGVkOyB9OwotICAgIGJvb2wgaXNTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPT0gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllczsgfTsKLSAgICB2b2lkIHNl
dEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIG1vZGUpIHsgbV9maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZSA9IG1vZGU7IH0KLSAgICB2b2lkIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbihS
ZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbikgeyBtX3N0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
biA9IFdURk1vdmUoZG9tYWluKTsgfQotI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKLSAg
ICB2b2lkIHNldEFwcEJvdW5kRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKTsK
LSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRV
bmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFzU3Rv
cmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURv
bWFpbiYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nl
c3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJikgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFp
bkZyYW1lRG9jdW1lbnRMb2FkLCBib29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURv
bWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLQotICAgIHZp
cnR1YWwgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBhbGxEb21haW5zKCkgY29uc3QgPSAwOwot
Ci0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgY29uc3QgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7
IH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdDsKKyAgICBi
b29sIGRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQpOworICAgIHZvaWQgcmVtb3ZlRGF0YUZv
ckRvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIGJvb2wgc2hvdWxkRW5mb3Jj
ZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCljb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVu
ZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNh
cCgpOworICAgIHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Cisg
ICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hl
TWF4QWdlQ2FwKCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMpOworICAgIHZvaWQgc2V0QXBwQm91bmREb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wpID0gMDsKLSAgICAKICAgICAvLyBQcml2YXRlIENsaWNrIE1l
YXN1cmVtZW50LgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsVW5hdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nKCkgPSAwOwot
ICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gYXR0cmlidXRlUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZVNpdGUmLCBjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRp
b25EZXN0aW5hdGlvblNpdGUmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0
cmlidXRpb25UcmlnZ2VyRGF0YSYmKSA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8V2ViQ29yZTo6
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpID0gMDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBv
cnRFbmRwb2ludCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcoKSA9IDA7Ci0KLXByb3RlY3RlZDoK
LSAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFN1c3BlbmRhYmxlV29ya1F1ZXVlJiwg
U2hvdWxkSW5jbHVkZUxvY2FsaG9zdCk7Ci0gICAgCi0gICAgYm9vbCBkYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQ7IH0KLQot
ICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OwotICAgIGJvb2wgc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgPSAw
OwotICAgIHZpcnR1YWwgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0
ZURhdGFGb3IgcmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFG
b3IoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgPSAw
OwotCi0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIHsgcmV0dXJu
IG1fc3RvcmU7IH0KLSAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+JiB3b3JrUXVldWUoKSB7
IHJldHVybiBtX3dvcmtRdWV1ZTsgfQotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotICAgIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVy
biBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9Ci0jZWxzZQotICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsgfQotI2VuZGlmCisgICAgdm9pZCBpbnNlcnRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYm
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7CisgICAgdm9pZCBtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
KCk7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gYXR0cmlidXRlUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUmLCBjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25E
ZXN0aW5hdGlvblNpdGUmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmli
dXRpb25UcmlnZ2VyRGF0YSYmKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpOworICAgIHZv
aWQgY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxl
RG9tYWluPik7CisgICAgdm9pZCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgp
OworICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCk7CisgICAgdm9p
ZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYm
LCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRw
b2ludCk7CisgICAgdm9pZCBtYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0Fz
RXhwaXJlZEZvclRlc3RpbmcoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5zRm9yVGFibGUo
Y29uc3QgU3RyaW5nJik7CiAKICAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CiAgICAgICAgIHNpemVf
dCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKQEAgLTI0OSw2ICsyMTQsMTQgQEAgcHJvdGVj
dGVkOgogICAgICAgICBzaXplX3QgbWluaW11bVRvcEZyYW1lUmVkaXJlY3RzRm9yU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCB7IDEwIH07CiAgICAgICAgIGJvb2wgaXNSdW5uaW5nVGVzdCB7IGZh
bHNlIH07CiAgICAgfTsKKyAgICAKKyAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Ro
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7IH07CisgICAgdm9pZCBzZXRUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgbW9k
ZSkgeyBtX3RoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBtb2RlOyB9OworICAgIHZvaWQg
c2V0U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQoV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQgZW5hYmxlZCkgeyBtX3NhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkID0gZW5hYmxlZDsgfTsKKyAgICBib29sIGlzU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3NhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkID09IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXM7
IH07CisgICAgdm9pZCBzZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBtb2RlKSB7IG1fZmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBzZXRTdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW4oUmVnaXN0cmFibGVEb21haW4mJiBkb21haW4pIHsgbV9zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW4gPSBXVEZNb3ZlKGRvbWFpbik7IH0KKyAgICBib29sIGRhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3Zl
ZDsgfQogICAgIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBt
X3BhcmFtZXRlcnM7IH0KICAgICBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cCgpIHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQogICAgIGNvbnN0
IFdhbGxUaW1lJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOyB9CkBAIC0yNjEsMjEgKzIzNCwxMzggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgZGVidWdMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdMb2dnaW5nRW5hYmxlZDsgfTsKICAgICBib29sIGRlYnVnTW9kZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH0KICAgICBXZWJDb3JlOjpGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7IH0K
LSAgICBib29sIHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLSAgICAK
LSAgICBWZWN0b3I8Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9kYXRhUmVjb3JkUmVtb3Zh
bENvbXBsZXRpb25IYW5kbGVyczsKKyAgICBib29sIGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlOyB9CisgICAgdm9pZCBzZXRJc05ld1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZUZpbGUoYm9vbCBpc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZp
bGUpIHsgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUgPSBpc05ld1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KIAogcHJpdmF0ZToKLSAgICBib29s
IHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWJ1Z0xvZ2dn
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAgIHZv
aWQgY2xvc2UoKTsKKyAgICB2b2lkIG9wZW5JVFBEYXRhYmFzZSgpOworICAgIHZvaWQgb3BlbkFu
ZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBjcmVhdGVVbmlxdWVJbmRpY2Vz
KCk7CisgICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKKyAgICB2b2lkIGFkZE1pc3NpbmdUYWJsZXNJ
Zk5lY2Vzc2FyeSgpOworICAgIGJvb2wgbWlzc2luZ1VuaXF1ZUluZGljZXMoKTsKKyAgICBib29s
IG5lZWRzVXBkYXRlZFNjaGVtYSgpOworICAgIGJvb2wgbmVlZHNVcGRhdGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRTY2hlbWEoKTsKKyAgICB2b2lkIHJlbmFtZUNvbHVtbkluVGFibGUoU3RyaW5n
JiYsIEV4aXN0aW5nQ29sdW1uTmFtZSYmLCBFeHBlY3RlZENvbHVtbk5hbWUmJik7CisgICAgdm9p
ZCBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYsIGNvbnN0IEV4aXN0aW5nQ29sdW1u
cyYsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYpOworICAgIHZvaWQgYWRkTWlzc2luZ0NvbHVtbnNJ
Zk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCByZW5hbWVDb2x1bW5JblRhYmxlKCk7CisgICAgVGFibGVBbmRJbmRleFBhaXIgY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgdXBkYXRlUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWFJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgZW5hYmxl
Rm9yZWlnbktleXMoKTsKKyAgICBib29sIG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpOworICAgIHZvaWQgbWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKKworICAgIHZvaWQgZGVzdHJveVN0YXRlbWVu
dHMoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRT
dGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBBU0NJ
SUxpdGVyYWwsIGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsK
KyAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRv
cEZyYW1lRG9tYWluJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJik7CisgICAgV2ViQ29yZTo6U3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQodW5zaWduZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Cisg
ICAgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFt
ZURvbWFpbiYpOworICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOworCisgICAgVmVjdG9yPFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFy
dHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh1bnNpZ25l
ZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICBTZWNvbmRzIGdldE1vc3RS
ZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYpIGNvbnN0OworCisgICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBtZXJnZShXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBpbnNl
cnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5z
aWduZWQpOworICAgIFN0cmluZyBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYpOworICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gZmlyc3REb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikg
Y29uc3Q7CisKKyAgICBTdHJpbmcgZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHVuc2lnbmVk
KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBkb21haW5JRChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgZG9tYWluRXhpc3RzKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZvaWQgdXBkYXRlRGF0YVJlY29yZHNS
ZW1vdmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgaW50KTsKKworICAgIHN0cnVjdCBEb21h
aW5EYXRhIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7CisgICAgICAgIFJlZ2lzdHJhYmxl
RG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOworICAgICAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb247CisgICAg
ICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKKyAgICAgICAgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsOworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OworICAgIH07CisKKyAgICBWZWN0
b3I8RG9tYWluRGF0YT4gZG9tYWlucygpIGNvbnN0OworICAgIHZvaWQgc2V0VXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdh
bGxUaW1lKTsKKyAgICBib29sIGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihj
b25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpOworICAgIHN0ZDo6b3B0aW9u
YWw8V2FsbFRpbWU+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKGNvbnN0IERvbWFpbkRh
dGEmKTsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7CisKKyAgICB2
b2lkIGNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmKTsKKyAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpOwogICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwotICAgIHZv
aWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNp
ZGVDb29raWVzKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VD
YXAoKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBk
b21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpIGNv
bnN0OworICAgIEhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWluPiBkb21h
aW5zV2l0aFN0b3JhZ2VBY2Nlc3MoKSBjb25zdDsKKworICAgIHZvaWQgcmVjbGFzc2lmeVJlc291
cmNlcygpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICBib29sIHBy
ZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKworICAgIGVudW0gY2xhc3Mg
QWRkZWRSZWNvcmQgeyBObywgWWVzIH07CisgICAgc3RkOjpwYWlyPEFkZGVkUmVjb3JkLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgCisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgc3RydWN0IE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXMgeworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFp
bjsKKyAgICAgICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7CisgICAgICAgIHVu
c2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWdu
ZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCB0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgfTsKKworICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworI2VuZGlmCisKKyAgICB1bnNpZ25l
ZCByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNE
b21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMp
OworICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Cisg
ICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAg
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVi
dWdNb2RlKCk7CisKKyAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0
IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpOworICAgIGJv
b2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBz
aG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKKyAgICBib29sIHNob3VsZEVuZm9yY2VTYW1l
U2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigp
OworCisgICAgQVNDSUlMaXRlcmFsIGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRl
ciYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7
CisKKyAgICB2b2lkIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKSAgeyB9CisgICAgdm9pZCB1cGRhdGVP
cGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKKworICAgIFNjb3BlRXhpdDxGdW5jdGlvbjx2b2lk
KCk+PiBXQVJOX1VOVVNFRF9SRVRVUk4gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisK
KyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9z
dG9yZTsgfQorI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllcjsgfQorI2VuZGlmCisgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiYg
d29ya1F1ZXVlKCkgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KKworICAgIC8vIFByaXZhdGUgQ2xp
Y2sgTWVhc3VyZW1lbnQuCisgICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0ZWQoV2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKKyAgICBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKTsK
KyAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQq
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7CisgICAgc3RkOjpwYWly
PHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBzdGQ6
Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4+IGZpbmRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOworICAgIHZvaWQgbWFya1JlcG9ydEFzU2VudFRvRGVz
dGluYXRpb24oU291cmNlRG9tYWluSUQsIERlc3RpbmF0aW9uRG9tYWluSUQpOworICAgIHZvaWQg
bWFya1JlcG9ydEFzU2VudFRvU291cmNlKFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEKTsKKyAgICBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPj4gZWFybGll
c3RUaW1lc1RvU2VuZChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYpOwog
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwogICAgIFJlZjxT
dXNwZW5kYWJsZVdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CkBAIC0zMDMsNiArMzkzLDc0IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgbV9m
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSB7IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIH07CiAgICAgUmVnaXN0cmFibGVEb21h
aW4gbV9zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47CiAgICAgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4gbV9hcHBCb3VuZERvbWFpbnM7CisgICAgVmVjdG9yPENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fZGF0YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnM7CisKKyAgICBQ
QUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGly
ZWN0b3J5UGF0aDsKKyAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VGaWxlIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fb3BlcmF0aW5nRGF0ZXNTaXplIHsg
MCB9OworICAgIHN0ZDo6b3B0aW9uYWw8T3BlcmF0aW5nRGF0ZT4gbV9sb25nV2luZG93T3BlcmF0
aW5nRGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fc2hvcnRXaW5kb3dP
cGVyYXRpbmdEYXRlOworICAgIE9wZXJhdGluZ0RhdGUgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZTsKKworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAg
ICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CisKKyAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0VG9wTGV2ZWxE
b21haW5TdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV90b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNT
dGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudDsK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVk
U3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PiBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50OworICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50OworICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRNb3N0
UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0
YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRl
bWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9yZW1vdmVBbGxEYXRhU3RhdGVt
ZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4gbV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50OworICAgIAorICAgIC8vIFByaXZhdGUg
Q2xpY2sgTWVhc3VyZW1lbnQuCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRl
bWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lu
c2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NldFVuYXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
U3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9hbGxVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2FsbEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2ZpbmRVbmF0dHJpYnV0ZWRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9maW5kQXR0cmlidXRlZFN0YXRl
bWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUF0dHJpYnV0aW9uc0VhcmxpZXN0VGltZVRvU2VuZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3JlbW92ZVVuYXR0cmlidXRlZFN0
YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X21hcmtSZXBvcnRBc1NlbnRUb1NvdXJjZVN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IDRkYjgwN2E3ZDlkNzA1NDAx
ZWQ1OWE2Y2VlZTJhZDdiMjQwNjc3NDAuLjY1OWIzOTBhNGE4ZDM2OWUzNTkzMTAwNWNjYzYxNzE5
YmI0OWZmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2lu
Y2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VB
Y2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCkBAIC0xNjQsMTAgKzE2
Myw3IEBAIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKE5ldHdvcmtTZXNzaW9uJiBuCiAKICAgICBpZiAoIXJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHBvc3RUYXNrKFt0aGlzLCBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeS5pc29sYXRlZENvcHkoKSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgc2Vzc2lvbklE
ID0gbmV0d29ya1Nlc3Npb24uc2Vzc2lvbklEKCldIHsKLSAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlID0gbWFrZVVuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
KnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBzZXNzaW9uSUQpOwotCi0gICAgICAgICAgICBhdXRv
IG1lbW9yeVN0b3JlID0gbWFrZVVuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCk7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlLmdldCgpKS5wb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSgqbWVtb3J5
U3RvcmUpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBtYWtlVW5pcXVlPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCBzaG91bGRJ
bmNsdWRlTG9jYWxob3N0LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBzZXNzaW9u
SUQpOwogCiAgICAgICAgICAgICBhdXRvIGxlZ2FjeVBsaXN0RmlsZVBhdGggPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbl9yZXNvdXJjZUxvZy5wbGlzdCIpOwogICAgICAgICAg
ICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobGVnYWN5UGxpc3RGaWxlUGF0aCkpCkBAIC0y
NDAsMTMgKzIzNiwxMiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cG9w
dWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKENvbXBsZXRpb25IYW5kbAogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlICYmIGlz
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBkYXRhYmFzZVN0b3JlID0gZG93bmNhc3Q8UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7Ci0gICAgICAg
ICAgICBpZiAoZGF0YWJhc2VTdG9yZS5pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZUZpbGUoKSkgeworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUgJiYgaXM8UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUtPmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
RmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YShbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGRhdGFi
YXNlU3RvcmUuc2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0SXNOZXdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBsb2dUZXN0aW5nRXZlbnQo
IlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJfcyk7CkBAIC0zMTAsMTIgKzMwNSwxMiBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNl
SGFzQWxsVGFibGVzKENvbXBsZXRpb25IYQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7IAotICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3Rh
dGlzdGljc1N0b3JlKSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8g
bWlzc2luZ1RhYmxlcyA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCk7
CisgICAgICAgIGF1dG8gbWlzc2luZ1RhYmxlcyA9IG1fc3RhdGlzdGljc1N0b3JlLT5jaGVja0Zv
ck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYXNBbGxU
YWJsZXMgPSBtaXNzaW5nVGFibGVzID8gZmFsc2UgOiB0cnVlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGhhc0FsbFRhYmxlcyk7CiAgICAgICAgIH0pOwpAQCAtMzI3LDEyICsz
MjIsMTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NE
YXRhYmFzZUNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHRhYmxlID0gdGFibGUuaXNvbGF0ZWRDb3B5
KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAg
IGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gY29sdW1ucyA9IGRvd25jYXN0PFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmNvbHVtbnNG
b3JUYWJsZSh0YWJsZSk7CisgICAgICAgIGF1dG8gY29sdW1ucyA9IG1fc3RhdGlzdGljc1N0b3Jl
LT5jb2x1bW5zRm9yVGFibGUodGFibGUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtjb2x1bW5z
ID0gV1RGTW92ZShjb2x1bW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGNvbHVtbnMpKTsKICAgICAgICAgfSk7CkBAIC03MzUsOCArNzMwLDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKICAgICBw
b3N0VGFzayhbdGhpc10gewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAg
ICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICAgICAgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQotICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
LnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworICAgICAgICAgICAgaWYgKGlzPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkKKyAgICAgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7CiAg
ICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTg4OSwxMiArODg0LDEyIEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNr
KFt0aGlzLCBzdWJEb21haW4gPSBzdWJEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcERvbWFpbiA9
IHRvcERvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1f
c3RhdGlzdGljc1N0b3JlKS5pc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoc3ViRG9tYWluLCB0
b3BEb21haW4pOworICAgICAgICBib29sIGlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNl
ID0gbV9zdGF0aXN0aWNzU3RvcmUtPmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChzdWJEb21h
aW4sIHRvcERvbWFpbik7CiAgICAgICAgIAogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKTsKQEAgLTExNTEsOCArMTE0Niw4
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyCiAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRm
YXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpIHsKICAgICAgICAgICAg
ICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0
aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNh
c3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9y
ZSkuc2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9z
dGF0aXN0aWNzU3RvcmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3Rv
cmUtPnNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSh0cnVlKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0
YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7
CiAgICAgICAgICAgICB9CkBAIC0xMTg1LDEyICsxMTgwLDExIEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklE
LCBDb21wCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0
aGlzLCBkb21haW5JRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkp
IHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgYXV0byYgZGF0YWJhc2VTdG9yZSA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpOwotICAgICAgICBib29sIGRvbWFpbklE
RXhpc3RzID0gZGF0YWJhc2VTdG9yZS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UoZG9tYWluSUQp
OworICAgICAgICBib29sIGRvbWFpbklERXhpc3RzID0gbV9zdGF0aXN0aWNzU3RvcmUtPmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShkb21haW5JRCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Rv
bWFpbklERXhpc3RzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZG9tYWluSURF
eGlzdHMpOwogICAgICAgICB9KTsKQEAgLTE0NDgsNyArMTQ0Miw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHNoYXJlZFN0
YXRpc3RpY3NRdWV1ZSgpLT5zdXNwZW5kKFtdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGZvciAoYXV0
byYgZGF0YWJhc2VTdG9yZSA6IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjph
bGxTdG9yZXMoKSkKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZVN0b3JlIDogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjphbGxTdG9yZXMoKSkKICAgICAgICAgICAgIGRhdGFiYXNlU3Rv
cmUtPmludGVycnVwdCgpOwogICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9PcGVyYXRpbmdEYXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTY1YTJiODFmZjdmYTA4MTVkMDBkZjUyZjYyNTc1YTI2MmMzNjgzZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9X
YWxsVGltZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7
CitwdWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0
aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVy
YXRpbmdEYXRlIHRvZGF5KCk7CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0
OworICAgIGludCB5ZWFyKCkgY29uc3QgeyByZXR1cm4gbV95ZWFyOyB9CisgICAgaW50IG1vbnRo
KCkgY29uc3QgeyByZXR1cm4gbV9tb250aDsgfQorICAgIGludCBtb250aERheSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9udGhEYXk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRp
bmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdE
YXRlJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgT3BlcmF0aW5nRGF0ZShpbnQgeWVhciwgaW50
IG1vbnRoLCBpbnQgbW9udGhEYXkpCisgICAgICAgIDogbV95ZWFyKHllYXIpCisgICAgICAgICwg
bV9tb250aChtb250aCkKKyAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQorICAgIHsgfQor
Citwcml2YXRlOgorICAgIGludCBtX3llYXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07
IC8vIFswLCAxMV0uCisgICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9Owor
Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIHsgMzAgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IHsgNyB9OworY29uc3Rl
eHByIFNlY29uZHMgb3BlcmF0aW5nVGltZVdpbmRvd0ZvckxpdmVPblRlc3RpbmcgeyAxX2ggfTsK
KworZW51bSBjbGFzcyBPcGVyYXRpbmdEYXRlc1dpbmRvdyA6IHVpbnQ4X3QgeyBMb25nLCBTaG9y
dCwgRm9yTGl2ZU9uVGVzdGluZywgRm9yUmVwcm9UZXN0aW5nIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKaW5kZXggNjZhZWRhNDNjODJkOGJmYjMzNWJiZmVmNjA5NWQwNGVm
YWRiODYyMC4uMzkxYWQ5NmVjNzUwYWExNjY3ODlkYzI5YTQ2MzJmNTQ3OGQ3Yzg2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CkBAIC04Myw4ICs4Myw2IEBAIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRTdHJl
YW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByZWNv
bm5lY3RUYXNrLmNwcAogCi1OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAotTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmUzZDMyYjMyOTVjMmM0NGZkNDQ0NGNkZDdmMTQx
ZjI0MDA0Y2EwMi4uZGJiNWE4M2Q1MWJlMWYzODI0N2E0NDA2ZTI2OGFkZDNlYjM5MzVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDAwLDYgKzEwMDAsOCBAQAogCQk0OUJDQTE5MjIzQTE3NzY2MDAyOEE4MzYgLyogQVBJUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QkNBMTkxMjNBMTc3NjYwMDI4QTgzNiAvKiBBUElSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eS5oICovOyB9OwogCQk0OUJDQTE5NTIzQTE4Q0ZEMDAy
OEE4MzYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCQ0ExOTAyM0Ex
NzU0OTAwMjhBODM2IC8qIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SW50ZXJu
YWwuaCAqLzsgfTsKIAkJNDlCQ0ExOTcyM0ExOTMwRDAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUJDQTE5NjIzQTE4RjYyMDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkuaCAqLzsgfTsKKwkJNDlDRUI0RkUyNkQ2QzE3NzAwMUE0QzYz
IC8qIE9wZXJhdGluZ0RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDRUI0RkQyNkQ2QzE3NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3Bw
ICovOyB9OworCQk0OUNFQjUwMTI2RDZDMjJFMDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDRUI1MDAyNkQ2
QzIxMDAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuaCAqLzsgfTsKIAkJNDlFQ0E0MUMyM0ZDQTVE
ODAwMjMzNThEIC8qIFBvbGljeURlY2lzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDQTQxQjIzRkNBNDg2MDAyMzM1OEQgLyogUG9saWN5RGVj
aXNpb24uaCAqLzsgfTsKIAkJNDlGQkVGRkQyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlGQkVGRkMyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5Lm1tICovOyB9OwogCQk0OUZCRUZGRjIzOUIwMTJGMDBC
RDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZCRUZGRTIzOUIwMTJGMDBC
RDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkubW0gKi87IH07CkBA
IC0xMzQ2LDcgKzEzNDgsNiBAQAogCQk3QUI2RUE0NzFFRUFCNkI4MDAwMzdCMkIgLyogQVBJR2Vv
bG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FCNkVBNDYxRUVBQjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlk
ZXIuaCAqLzsgfTsKIAkJN0FGMjM2MjExRTc5QTQwODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGMjM2MUYxRTc5
QTNEODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oICovOyB9OwogCQk3QUZCRDM2MzIxRTUwRjM5MDA1
REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0Ig
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi87IH07Ci0JCTdBRkJEMzY3MjFF
NTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzY1MjFFNTFC
QUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLzsgfTsK
IAkJN0FGQkQzNkYyMUU1NDZGODAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzZEMjFFNTQ2RTMw
MDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi87IH07CiAJCTdCMURCMjY2MjU2NjhDRTEw
MDBFMjZCQyAvKiBBcnJheVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IxREIyNjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJl
bmNlLmggKi87IH07CiAJCTdCNDgzRjFGMjVDRERBOUMwMDEyMDQ4NiAvKiBNZXNzYWdlUmVjZWl2
ZVF1ZXVlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QjQ4M0YxQjI1Q0REQTlCMDAxMjA0ODYgLyogTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oICov
OyB9OwpAQCAtMzk3NCw2ICszOTc1LDggQEAKIAkJNDlCQ0ExOTAyM0ExNzU0OTAwMjhBODM2IC8q
IF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUJDQTE5MTIzQTE3NzY2MDAyOEE4MzYgLyogQVBJ
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDlCQ0ExOTYyM0ExOEY2MjAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaGlyZFBhcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NU
aGlyZFBhcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5Q0VCNEZEMjZENkMx
NzcwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9wZXJh
dGluZ0RhdGUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9PcGVyYXRpbmdEYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDRUI1MDAyNkQ2QzIxMDAwMUE0QzYzIC8qIE9wZXJh
dGluZ0RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BlcmF0aW5nRGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OURBQTM4QjI0Q0JBMUE4MDA3OTNENzUgLyogRGVmYXVsdFdlYkJy
b3dzZXJDaGVja3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEZWZhdWx0V2ViQnJvd3NlckNo
ZWNrcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlEQUEzOEQyNENCQTFCRDAw
NzkzRDc1IC8qIERlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNB
NDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
b2xpY3lEZWNpc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYyNSw4ICs0
NjI4LDggQEAKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURh
dGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMw
MTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1By
ZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTBE
Nzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0EwRDc4
NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBwYXRoID0g
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFwcGxlLldl
YktpdC5wbHVnaW4tY29tbW9uLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9ICJjb20uYXBwbGUu
V2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdDIv
Y29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJN0ExRTJBODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQSU5vdGlmaWNh
dGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5vdGlm
aWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBM0FDRTFB
MUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9h
ZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjQ4LDE0ICs0NjUx
LDEwIEBACiAJCTdBQjRFQTQyMjI3NzgwREQwMDg1QkJBQSAvKiBTYW5kYm94VXRpbGl0aWVzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2FuZGJveFV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUljb25EYXRh
YmFzZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJY29uRGF0
YWJhc2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVB
QjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FDRTgyRTgy
MjFDQUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUg
LyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFGMUU3OUEz
RDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3
OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FGQkQz
NjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGQkQzNkQyMUU1
NDZFMzAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lz
dGVuY3lVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2RTIxRTU0
NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
ZXJzaXN0ZW5jeVV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxREIy
NjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFycmF5UmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05Mzc1LDEyICs5Mzc0LDEwIEBACiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAv
KiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwICovLAotCQkJCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovLAotCQkJCTdBRkJEMzY0MjFFNTFC
QUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovLAot
CQkJCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUuaCAqLywKLQkJCQk3QUNFODJFODIyMUNBRTA3MDAwREE5NEMgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKLQkJCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCisJCQkJNDlDRUI0RkQyNkQ2QzE3
NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3BwICovLAorCQkJCTQ5Q0VCNTAwMjZENkMyMTAw
MDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmggKi8sCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJD
RjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCisJCQkJN0EwRDc4NjEy
MjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJ
CTdBNDFFOUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mu
aCAqLywKIAkJCQk3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1
cy5oICovLAogCQkJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwICovLApAQCAtMTIyNDgsNiArMTIyNDUsNyBAQAogCQkJCTM3NTRE
NTQ1MUIzQTI5RkQwMDNBNEM3RiAvKiBOU0ludm9jYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxREQ3MkFCMjY4MjE2NzMwMEE5MEM3MSAvKiBOV1BhcmFtZXRlcnNTUEkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGgu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ5Q0VCNTAxMjZENkMyMkUwMDFBNEM2MyAvKiBPcGVyYXRp
bmdEYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNEVCNEFGRDI2OUNEN0YzMDBEMjk3QUUgLyog
T1NTdGF0ZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkx
IC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3
Njc4QiAvKiBQYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTEyMzc1LDcgKzEyMzczLDYg
QEAKIAkJCQk1Q0I3QUZFNzIzQzY4MjA3MDBFNDlDRjMgLyogUmVzb3VyY2VMb2FkSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkJFOTY5Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFFNTRE
NENGMDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMDA2NkUxMTEw
RjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NkYzOEU4QzI0MTZFNjczMDA1OTM3NUEgLyogUnVubmluZ0JvYXJkU2VydmljZXNTUEku
aCBpbiBIZWFkZXJzICovLApAQCAtMTQyNjQsNiArMTQyNjEsNyBAQAogCQkJCTJEOTEzNDQ3MjEy
Q0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkQ5MTM0NDgyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRDkyQTc5NDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBWYXJpYW50RGF0
YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUNFQjRGRTI2RDZDMTc3MDAxQTRDNjMgLyogT3Bl
cmF0aW5nRGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTEzNDQ5
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436589</attachid>
            <date>2021-08-26 16:56:27 -0700</date>
            <delta_ts>2021-09-17 11:30:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229512-20210826165626.patch</filename>
            <type>text/plain</type>
            <size>560488</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYwYzkwNDkwMTU1MzA0M2I1
YTIzNjAwMDU3ZWQzZjNiODcyNDRhZjYuLjhmYjQ5YTQwNjRkOTcxZGFlMDBiZTFkMDA1MDc3NGM0
OWY3MDExYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMwIEBACisyMDIxLTA4LTI1ICBLYXRlIENo
ZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBJVFAgbWVtb3J5IHN0b3JlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTUxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzA3
NDMyNTg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGV4aXN0aW5nIFBDTSBhbmQgSVRQIGxheW91dCBhbmQg
QVBJIHRlc3RzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgYW5kIG1lcmdlcworICAgICAgICBmdW5jdGlvbnMgZnJvbSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSB3aXRoIGl0cyBwYXJlbnQKKyAgICAgICAg
Y2xhc3MgdG8gaGF2ZSBhIHNpbmdsZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3Mu
CisKKyAgICAgICAgSSB0b29rIHRoaXMgY2hhbmNlIHRvIGFsc28gdHJ5IGFuZCBiZXR0ZXIgb3Jn
YW5pemUgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZQorICAgICAgICBoZWFkZXIgZmls
ZSB0byBjbHVtcCByZWxhdGVkIGZ1bmN0aW9ucyB0b2dldGhlci4gQW5kLCBJIHJlbW92ZWQgc29t
ZQorICAgICAgICB1bnVzZWQgZnVuY3Rpb25zIEkgZm91bmQgd2hlbiBtaWdyYXRpbmcuCisKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL09wZXJhdGluZ0RhdGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRl
OjpvcGVyYXRvcjw9IGNvbnN0KToKKyAgICAgICAgTW92ZSBPcGVyYXRpbmdEYXRlIGNvZGUgdG8g
aXRzIG93biBmaWxlIHRvIHJlZHVjZSBjb21wbGV4aXR5IG9mCisgICAgICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEpOgor
ICAgICAgICAoV2ViS2l0OjpPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVtYVYxQWx0ZXJuYXRlKToK
KyAgICAgICAgKFdlYktpdDo6ZXhwZWN0ZWRVbmF0dHJpYnV0ZWRDb2x1bW5zKToKKyAgICAgICAg
KFdlYktpdDo6ZXhwZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucyk6CisgICAgICAgIChXZWJLaXQ6Om5l
ZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpleHBlY3RlZFRhYmxlQW5k
SW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsb3NlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpvcGVuSVRQRGF0YWJhc2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbmFibGVGb3Jl
aWduS2V5cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNj
aGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlz
c2luZ1VuaXF1ZUluZGljZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucyk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVkU2NoZW1hKToK
KyAgICAgICAgKFdlYktpdDo6aW5zZXJ0RGlzdGluY3RWYWx1ZXNJblRhYmxlU3RhdGVtZW50KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0
YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNvbHVtbnNGb3JUYWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdUYWJsZXNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3Bl
bkFuZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY29wZWRTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmludGVycnVwdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3JlYXRlVW5pcXVlSW5k
aWNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3Jl
YXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpkZXN0cm95U3RhdGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluSUQgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZUFu
ZE1ha2VEb21haW5MaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VTdGF0aXN0
aWMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdl
U3RhdGlzdGljcyk6CisgICAgICAgIChXZWJLaXQ6OmpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0VGhp
cmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6aGFzQmVlblRoaXJkUGFydHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZpbmROb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVuSW5jcmVtZW50YWxW
YWN1dW1Db21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFj
Y2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1Np
bmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0
aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXAgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckRhdGFiYXNlQ29udGVudHMpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFsbERvbWFp
bnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjph
cmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29va2llQWNjZXNzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0
S2VlcENvb2tpZXNGb3IgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5z
V2l0aFN0b3JhZ2VBY2Nlc3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4
cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxC
dXRDb29raWVzRm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3Ry
YWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUxhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OmFwcGVuZEJvb2xlYW4pOgorICAgICAgICAo
V2ViS2l0OjphcHBlbmROZXh0RW50cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z2V0U3ViU3RhdGlzdGlj
U3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphcHBlbmRTdWJTdGF0aXN0aWNMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
aGFzSGFkUmVjZW50VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJh
c2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRp
c3RpY3NFeHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyk6CisgICAgICAgIChX
ZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlVW5hdHRyaWJ1dGVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphdHRyaWJ1dGVQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByaXZhdGVDbGlja01l
YXN1cmVtZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZWFybGllc3RUaW1lc1RvU2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJTZW50QXR0cmlidXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNF
eHBpcmVkRm9yVGVzdGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNTYW1lU2l0ZVN0cmljdEVu
Zm9yY2VtZW50RW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0YW5kYWxvbmVB
cHBsaWNhdGlvbkRvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhck9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xhc3NpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6d29ya1F1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om1vbnRoIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6bW9udGhEYXkgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdE
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc01lbW9yeVN0b3Jl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc0RhdGFiYXNlU3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9y
eVN0b3JlRnJvbURpc2spOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NEYXRhYmFzZUhhc0FsbFRhYmxlcyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNlQ29s
dW1uc0ZvclRhYmxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFzZU9uY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3VzcGVuZCk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6eWVhciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om1vbnRoIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
bW9udGhEYXkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRp
bmdEYXRlKToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMS0wOC0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFtSQlNUYXJnZXQgdGFyZ2V0V2l0aFBpZDpd
IGR1cmluZyBXZWJQcm9jZXNzUHJveHk6OnNodXREb3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvT3BlcmF0aW5nRGF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDdmNWIxOTI0MzNlY2FjYjEwMDNhYmQzNWYxMzU0MzViYTE2YWVhMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9PcGVyYXRp
bmdEYXRlLmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wZXJhdGluZ0RhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNU
b1llYXIobXMpOworICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBp
bnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7
CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwg
bW9udGhEYXkgfTsKK30KKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkp
OworfQorCitTZWNvbmRzIE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9u
dGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0Rh
dGU6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVy
Lm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdE
YXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwor
fQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJlOGQyZGIzYzc1ZDljYjJkNjg3YjI1YjlhZWJl
MDBjMjBjOWZiMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzY3MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9T
VEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtTZXNz
aW9uLmgiCi0jaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJQbHVn
aW5Qcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlICJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFn
ZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLSNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCi0jaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0NvbnNvbGVUeXBlcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNj
ZXNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Vc2Vy
R2VzdHVyZUluZGljYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4K
LSNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhv
b2RIYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotI2RlZmluZSBJVFBfUkVMRUFTRV9MT0coc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0coTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQotI2RlZmluZSBJVFBfUkVM
RUFTRV9MT0dfRVJST1Ioc2Vzc2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQotCi0vLyBDT1VOVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBv
YnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWRE
b21haW5zIl9zOwotY29uc3RleHByIGF1dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVy
eSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Ci1j
b25zdGV4cHIgYXV0byBjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3Vi
cmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0
ZXhwciBhdXRvIGNvdW50U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVD
VCBDT1VOVCgqKSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSA/OyJfczsKLWNvbnN0ZXhwciBhdXRv
IGNvdW50UHJldmFsZW50UmVzb3VyY2VzUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJl
Z2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9
IDE7Il9zOwotY29uc3RleHByIGF1dG8gY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlcklu
dGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWlu
KSBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDE7Il9zOwotCi1jb25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291
cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1Qg
cmVnaXN0cmFibGVEb21haW4pIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSBBTkQgaGFkVXNlckludGVyYWN0aW9uID0gMDsiX3M7Ci0KLS8vIElOU0VSVCBPUiBJR05P
UkUgUXVlcmllcwotY29uc3RleHByIGF1dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJ
TlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2Vlbiwg
aGFkVXNlckludGVyYWN0aW9uLCIKLSAgICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUs
IGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIK
LSAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNT
Y2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9t
YWluUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChk
b21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50
byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxl
RG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUg
aW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50IChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElH
Tk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZy
b21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURv
bWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVn
aXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBpbiAoICJfczsKLQotLy8gSU5TRVJUIE9SIFJFUExBQ0UgUXVlcmllcwotY29uc3RleHBy
IGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBM
QUNFIGludG8gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwg
bGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyB3aGVyZSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKLWNvbnN0
ZXhwciBhdXRvIHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBS
RVBMQUNFIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0
VXBkYXRlZCwgZnJvbURvbWFpbklEKSBTRUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7Ci1jb25zdGV4cHIgYXV0
byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFp
bklELCBsYXN0VXBkYXRlZCwgdG9wRnJhbWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOwot
Y29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VS
VCBPUiBSRVBMQUNFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3Vy
Y2VEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsK
LWNvbnN0ZXhwciBhdXRvIGluc2VydFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwg
IgotICAgICJzb3VyY2VJRCwgdGltZU9mQWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQp
IFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPykiX3M7Ci1jb25zdGV4cHIgYXV0byBpbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFD
RSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFp
bklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgotICAgICJzb3VyY2VJRCwgYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSwgcHJpb3JpdHksIHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
LQotLy8gRVhJU1RTIFF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCi0gICAg
IkFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMg
KFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCi0gICAgIldI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVD
VCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8pKSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gIgotICAgICJBTkQgdG9E
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Ci1jb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCi0gICAgIkFO
RCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotY29uc3RleHByIGF1dG8gdG9wRnJhbWVM
b2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURv
bWFpbklEID0gPyAiCi0gICAgIkFORCBzdWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKLWNvbnN0ZXhwciBhdXRvIHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJ
U1RTIChTRUxFQ1QgMSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVS
RSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOwotCi0v
LyBVUERBVEUgUXVlcmllcwotY29uc3RleHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9
ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyAiX3MKLSAgICAiV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVy
eSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1v
dmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVk
ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byB1cGRh
dGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlz
UHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIg
YXV0byB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ZlcnlQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9
IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gdXBkYXRl
R3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRv
IHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Ci1jb25zdGV4cHIgYXV0byBz
ZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQ
REFURSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGlj
ayA9IC0xLjAiX3M7Ci1jb25zdGV4cHIgYXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVy
eSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBB
TkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gbWFya1Jl
cG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVs
bCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCA9ID8iX3M7Ci0KLS8vIFNFTEVDVCBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byBkb21haW5JREZy
b21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5n
RnJvbURvbWFpbklEUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzUHJldmFs
ZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwotY29uc3RleHByIGF1dG8gaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBh
dXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24s
IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJl
ZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIDwgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKLWNvbnN0ZXhwciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1l
c3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFYKGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVw
ZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9t
YWluSUQgPSA/IGFuZCB0b3BGcmFtZURvbWFpbklEID0gPyJfcwotICAgICJVTklPTiBBTEwgU0VM
RUNUIGxhc3RVcGRhdGVkIEZST00gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRv
RG9tYWluSUQgPSA/IGFuZCBmcm9tRG9tYWluSUQgPSA/IgotICAgICJVTklPTiBBTEwgU0VMRUNU
IGxhc3RVcGRhdGVkIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBz
dWJyZXNvdXJjZURvbWFpbklEID0gPyBhbmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCi0gICAgIlVO
SU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7
Ci1jb25zdGV4cHIgYXV0byBnZXRBbGxEb21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxl
RG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOwotY29uc3RleHByIGF1dG8gZ2V0QWxsU3Vi
U3RhdGlzdGljc1VuZGVyRG9tYWluUXVlcnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IgotICAgICJVTklPTiBBTEwgU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgotICAg
ICJVTklPTiBBTEwgU0VMRUNUIHRvRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8g
YWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOwot
Y29uc3RleHByIGF1dG8gYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkg
PSAiU0VMRUNUICosIE1JTihlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1l
VG9TZW5kVG9EZXN0aW5hdGlvbikgYXMgbWluVmFsICIKLSAgICAiRlJPTSBBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMg
Tk9UIE5VTEwgQU5EIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwg
IgotICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFz
IG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIElTIE5VTEwgIgotICAgICJVTklPTiBBTEwgU0VM
RUNUICosIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlIElTIE5VTEwgT1JERVIgQlkgbWluVmFsIl9zOwotY29uc3RleHByIGF1dG8gZmluZFVu
YXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25T
aXRlRG9tYWluSUQgPSA/Il9zOwotY29uc3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9
ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBz
b3VyY2VTaXRlRG9tYWluSUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7
Ci1jb25zdGV4cHIgYXV0byBlYXJsaWVzdFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxp
ZXN0VGltZVRvU2VuZFRvU291cmNlLCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZS
T00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21h
aW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotLy8gRVhJU1RT
IGZvciB0ZXN0aW5nIHF1ZXJpZXMKLWNvbnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3Rz
UXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0
aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5JRCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Ci1j
b25zdGV4cHIgYXV0byBzY3JpcHRMb2FkRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1l
RG9tYWluSUQgPSA/IE9SIHN1YnJlc291cmNlRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBh
dXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9S
IHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhp
c3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1l
RG9tYWluSUQgPSA/KSJfczsKLWNvbnN0ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVl
cnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJf
czsKLWNvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBF
WElTVFMgKFNFTEVDVCAqIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyki
X3M7Ci0KLS8vIERFTEVURSBRdWVyaWVzCi1jb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVl
cnkgPSAiREVMRVRFIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsK
LWNvbnN0ZXhwciBhdXRvIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRR
dWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBX
SEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgTElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
IExJS0UgPyJfczsKLWNvbnN0ZXhwciBhdXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50UXVlcnkgPSAiREVMRVRFIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRl
RG9tYWluSUQgTElLRSA/Il9zOwotY29uc3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBXSEVSRSA/ID4gdGltZU9mQWRDbGljayJfczsKLWNvbnN0ZXhwciBhdXRv
IHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEID0gPyJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2
ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9tYWlucyAoIgotICAgICJkb21haW5J
RCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCi0gICAgImhh
ZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIK
LSAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVH
RVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKLSAgICAi
dGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9U
IE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5U
RUdFUiBOT1QgTlVMTCwiCi0gICAgImlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7Ci0KLWVudW0gewotICAgIERvbWFpbklESW5kZXgsCi0g
ICAgUmVnaXN0cmFibGVEb21haW5JbmRleCwKLSAgICBMYXN0U2VlbkluZGV4LAotICAgIEhhZFVz
ZXJJbnRlcmFjdGlvbkluZGV4LAotICAgIE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5k
ZXgsCi0gICAgR3JhbmRmYXRoZXJlZEluZGV4LAotICAgIElzUHJldmFsZW50SW5kZXgsCi0gICAg
SXNWZXJ5UHJldmFsZW50SW5kZXgsCi0gICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCi0gICAg
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAotICAg
IElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxJbmRleAotfTsKLQotY29uc3Rl
eHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERv
bWFpbnMgKCIKLSAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05T
VFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgotICAgICJS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OwotICAgIAotY29uc3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVE
b21haW5zID0gIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
KCIKLSAgICAiZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKLSAgICAiQ09OU1RSQUlOVCBma0RvbWFp
bklEIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAgICAi
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBL
RVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAo
IgotICAgICJzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5D
RVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgotICAgICJG
T1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoIgotICAgICJ0YXJnZXREb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
LCAiCi0gICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8g
Y3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFt
ZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIKLSAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgIgotICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkoZnJv
bURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzICgiCi0gICAgInRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3Vy
Y2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvcEZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVO
Q0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotCi1j
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFU
RSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCi0gICAgInN1YkZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgbGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgotICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOwotICAgIAot
Y29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJD
UkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgotICAgICJzdWJy
ZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5V
TEwsIHRvcEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgotICAgICJGT1JFSUdOIEtF
WShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUsICIKLSAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
KSJfczsKLSAgICAKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKLSAg
ICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFM
IE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAiRk9SRUlHTiBL
RVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCi0gICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7
Ci0gICAgCi1jb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgotICAg
ICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCAiCi0gICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgot
ICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7Ci0KLWNvbnN0ZXhwciBhdXRvIGNyZWF0
ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgotICAgICJ5
ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElO
VEVHRVIgTk9UIE5VTEwpIl9zOwotCi1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlE
IElOVEVHRVIgTk9UIE5VTEwsICIKLSAgICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0
b2tlbiBURVhULCBzaWduYXR1cmUgVEVYVCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNl
U2l0ZURvbWFpbklEKSAiCi0gICAgIlJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklE
KSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQp
IFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKSJfczsKLQotY29uc3RleHByIGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50ID0gIkNSRUFURSBUQUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgKCIKLSAgICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3Rp
bmF0aW9uU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9U
IE5VTEwsICIKLSAgICAiYXR0cmlidXRpb25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBw
cmlvcml0eSBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIK
LSAgICAiZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0
dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVB
TCwgIgotICAgICJGT1JFSUdOIEtFWShzb3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVz
dGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgotICAgICJPYnNlcnZlZERvbWFpbnMo
ZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKLQotLy8gQ1JFQVRFIFVOSVFVRSBJTkRF
WCBRdWVyaWVzLgotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFp
bklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BM
ZXZlbERvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RT
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVY
IElGIE5PVCBFWElTVFMgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudF9zb3VyY2VEb21haW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5J
RCwgdG9Eb21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJ
U1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWlu
SUQgb24gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21E
b21haW5JRCApIl9zOwotY29uc3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxp
bmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRv
cEZyYW1lTGlua0RlY29yYXRpb25zRnJvbV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5
U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2Fk
ZWRUaGlyZFBhcnR5U2NyaXB0c190b3BGcmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQg
b24gVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1
YnJlc291cmNlRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5P
VCBFWElTVFMgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3Rv
cEZyYW1lRG9tYWluSUQgb24gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1l
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJy
ZXNvdXJjZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsK
LWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUb19zdWJyZXNvdXJjZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJf
czsKLWNvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3VicmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJv
bURvbWFpbklEICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGlu
Z0RhdGVzID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRl
c195ZWFyX21vbnRoX21vbnRoRGF5IG9uIE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1v
bnRoRGF5ICkiX3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVY
SVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWlu
SURfZGVzdGluYXRpb25TaXRlRG9tYWluSUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICki
X3M7Ci1jb25zdGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlv
blNpdGVEb21haW5JRCBvbiBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3Vy
Y2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Ci0KLS8vIEFkZCBv
bmUgdG8gdGhlIGNvdW50IG9mIHRoZSBhYm92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9y
IHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNh
bGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJlY2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgotY29uc3Qg
aW50IGV4cGVjdGVkSW5kZXhDb3VudCA9IDE0OwotCi1zdGF0aWMgY29uc3QgU3RyaW5nIE9ic2Vy
dmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKQotewotICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERv
bWFpbjsKLX0KLQotc3RhdGljIGNvbnN0IFN0cmluZyBPYnNlcnZlZERvbWFpbnNUYWJsZVNjaGVt
YVYxQWx0ZXJuYXRlKCkKLXsKLSAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9t
YWluc1wiIChkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBU
RVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBO
VUxMLCBoYWRVc2VySW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBO
VUxMLCBpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1Qg
TlVMTCxpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5V
TEwpIl9zOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3RlZFVuYXR0
cmlidXRlZENvbHVtbnMoKQotewotICAgIHN0YXRpYyBjb25zdCBhdXRvIGNvbHVtbnMgPSBtYWtl
TmV2ZXJEZXN0cm95ZWQoVmVjdG9yPFN0cmluZz4geyAic291cmNlU2l0ZURvbWFpbklEIl9zLCAi
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQiX3MsICJzb3VyY2VJRCJfcywgInRpbWVPZkFkQ2xpY2si
X3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlEIl9zIH0pOwotICAgIHJldHVybiBj
b2x1bW5zLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgRXhwZWN0ZWRDb2x1bW5zJiBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhIl9zLCAicHJpb3JpdHkiX3MsICJ0aW1lT2ZBZENsaWNrIl9zLCAiZWFybGll
c3RUaW1lVG9TZW5kVG9Tb3VyY2UiX3MsICJ0b2tlbiJfcywgInNpZ25hdHVyZSJfcywgImtleUlE
Il9zLCAiZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiJfcyB9KTsKLSAgICByZXR1cm4g
Y29sdW1ucy5nZXQoKTsKLX0KLQotc3RhdGljIGJvb2wgbmVlZHNOZXdDcmVhdGVUYWJsZVNjaGVt
YShjb25zdCBTdHJpbmcmIHNjaGVtYSkKLXsKLSAgICByZXR1cm4gc2NoZW1hLmNvbnRhaW5zKCJS
RUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyIpOwotfQotCi1zdGF0aWMgU3RyaW5nIHN0cmlwSW5k
ZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjb25zdCBjaGFyKiBvcmlnaW5hbFF1ZXJ5KQotewot
ICAgIHJldHVybiBTdHJpbmcob3JpZ2luYWxRdWVyeSkucmVwbGFjZSgiQ1JFQVRFIFVOSVFVRSBJ
TkRFWCBJRiBOT1QgRVhJU1RTIiwgIkNSRUFURSBVTklRVUUgSU5ERVgiKTsKLX0KLQotc3RhdGlj
IGNvbnN0IE1lbW9yeUNvbXBhY3RMb29rdXBPbmx5Um9iaW5Ib29kSGFzaE1hcDxTdHJpbmcsIFRh
YmxlQW5kSW5kZXhQYWlyPiYgZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpCi17Ci0gICAg
c3RhdGljIGF1dG8gZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcyA9IG1ha2VOZXZlckRlc3Ry
b3llZChNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5nLCBUYWJs
ZUFuZEluZGV4UGFpcj4gewotICAgICAgICB7ICJPYnNlcnZlZERvbWFpbnMiX3MsIHN0ZDo6bWFr
ZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVPYnNlcnZlZERvbWFp
biwgc3RkOjpudWxsb3B0KSB9LAotICAgICAgICB7ICJUb3BMZXZlbERvbWFpbnMiX3MsIHN0ZDo6
bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BMZXZlbERv
bWFpbnMsIHN0ZDo6bnVsbG9wdCkgfSwKLSAgICAgICAgeyAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4
UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMpKSB9LAotICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3Jl
ZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykpIH0sCi0g
ICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+
PihjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50
KSkgfSwKLSAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRl
VW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJU
b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHN0
cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIH0sCi0gICAgICAgIHsgIlRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJp
bmc+PihjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzLCBzdHJpcEluZGV4UXVl
cnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRlZFRoaXJk
UGFydHlTY3JpcHRzKSkgfSwKLSAgICAgICAgeyAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9y
ZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9
LAotICAgICAgICB7ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIl9zLCBzdGQ6Om1h
a2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIH0sCi0gICAg
ICAgIHsgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iX3MsIHN0ZDo6bWFrZV9wYWlyPFN0
cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5k
ZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgfSwKLSAgICAgICAgeyAiU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB9LAotICAgICAgICB7ICJPcGVyYXRpbmdEYXRlcyJfcywg
c3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZU9wZXJh
dGluZ0RhdGVzLCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVl
SW5kZXhPcGVyYXRpbmdEYXRlcykpIH0sCi0gICAgICAgIHsgIlVuYXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIHN0cmlw
SW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfSwKLSAgICAgICAgeyAiQXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPj4oY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB9Ci0gICAgfSk7Ci0gICAgCi0gICAgcmV0dXJuIGV4
cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXM7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBDb250
YWluZXJUeXBlPgotc3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgQ29udGFpbmVyVHlwZSYg
dmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGlj
X3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUodmFsdWUpPj4pCi0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHko
KSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLX0KLQotSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZSo+JiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsU3RvcmVz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKj4+
IG1hcDsKLSAgICByZXR1cm4gbWFwOwotfQotCi1SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1
ZSwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBT
dHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCi0g
ICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSwgc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCkKLSAgICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoRmlsZVN5c3Rl
bTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCAib2JzZXJ2
YXRpb25zLmRiIl9zKSkKLSAgICAsIG1fdHJhbnNhY3Rpb24obV9kYXRhYmFzZSkKLSAgICAsIG1f
c2Vzc2lvbklEKHNlc3Npb25JRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIGVuYWJsZUZvcmVp
Z25LZXlzKCk7Ci0KLSAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3b3JrZXJRdWV1ZSwgdGhl
IHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQgYnkgZGlmZmVyZW50IHRo
cmVhZHMuCi0gICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0gICAgCi0g
ICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotCi0gICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsK
LSAgICBhbGxTdG9yZXMoKS5hZGQodGhpcyk7Ci19Ci0KLVJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoKQotewot
ICAgIGNsb3NlKCk7Ci0gICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbG9zZSgpCi17Ci0gICAgZGVzdHJv
eVN0YXRlbWVudHMoKTsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgbV9k
YXRhYmFzZS5jbG9zZSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpvcGVuSVRQRGF0YWJhc2UoKQotewotICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4
aXN0cyhtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAgICAgICBpZiAoIUZpbGVTeXN0ZW06
Om1ha2VBbGxEaXJlY3RvcmllcyhGaWxlU3lzdGVtOjpwYXJlbnRQYXRoKG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2lzTmV3UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewotICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19M
T0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
YXV0byBzZXRCdXN5VGltZW91dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiUFJBR01B
IGJ1c3lfdGltZW91dCA9IDUwMDAiX3MpOwotICAgIGlmICghc2V0QnVzeVRpbWVvdXQgfHwgc2V0
QnVzeVRpbWVvdXQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRCdXN5VGltZW91dCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1faXNOZXdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKSB7Ci0gICAgICAgIGlmICghY3JlYXRl
U2NoZW1hKCkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1zdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2hlY2tGb3JNaXNzaW5nVGFibGVzSW5TY2hlbWEoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IG1pc3NpbmdUYWJsZXM7Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAxIGZyb20gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBl
PSd0YWJsZScgYW5kIHRibF9uYW1lPT8iX3MpOwotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
cHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkua2V5cygpKSB7Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlKSAh
PSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjaGVja0Zvck1pc3NpbmdU
YWJsZXNJblNjaGVtYSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNoZWNrRm9y
TWlzc2luZ1RhYmxlc0luU2NoZW1hIHNjaGVtYSBpcyBtaXNzaW5nIHRhYmxlOiAlcyIsIHRoaXMs
IHRhYmxlLmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1pc3NpbmdUYWJsZXMuYXBwZW5k
KFN0cmluZyh0YWJsZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsK
LSAgICB9Ci0gICAgaWYgKG1pc3NpbmdUYWJsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotCi0gICAgcmV0dXJuIG1pc3NpbmdUYWJsZXM7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuYWJsZUZvcmVpZ25LZXlzKCkKLXsK
LSAgICBhdXRvIGVuYWJsZUZvcmVpZ25LZXlzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gT04iX3MpOwotICAgIGlmICghZW5hYmxlRm9yZWlnbktl
eXMgfHwgZW5hYmxlRm9yZWlnbktleXMtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0K
LQotVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyhjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKLXsK
LSAgICBhdXRvIGdldFRhYmxlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50
KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0/IEFORCB0eXBl
ID0gJ3RhYmxlJyJfcyk7Ci0gICAgaWYgKCFnZXRUYWJsZVN0YXRlbWVudCkgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVwYXJl
IHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9
IFNRTElURV9PSykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhR
dWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0
YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVw
KCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggdGFibGUgc2No
ZW1hLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgY3JlYXRlVGFibGVRdWVyeSA9IGdl
dFRhYmxlU3RhdGVtZW50LT5jb2x1bW5UZXh0KDApOwotCi0gICAgYXV0byBnZXRJbmRleFN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0
ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlwZSA9ICdpbmRleCciX3MpOwotICAgIGlm
ICghZ2V0SW5kZXhTdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmN1cnJlbnRUYWJs
ZUFuZEluZGV4UXVlcmllcyBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggaW5k
ZXggZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKGdldEluZGV4U3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCB0YWJsZU5hbWUpICE9IFNRTElURV9PSykgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBiaW5kIHN0
YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7Ci0gICAgaWYgKGdldEluZGV4U3RhdGVt
ZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBhdXRvIHJhd0luZGV4ID0gU3Ry
aW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsKLSAgICAgICAgaWYgKCFyYXdJ
bmRleC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBpbmRleCA9IHJhd0luZGV4OwotICAgIH0KLQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4o
V1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRleCkpOwotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpuZWVkc1VwZGF0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFNjaGVtYSgpCi17Ci0gICAgYXV0byBjdXJyZW50U2NoZW1hID0gY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKCJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpLmZpcnN0OwotCi0gICAgaWYgKCFjdXJyZW50U2NoZW1hLmlzRW1wdHkoKSAmJiBjdXJyZW50
U2NoZW1hICE9IGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzKCkKLXsKLSAg
ICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIENP
VU5UKCopIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ2luZGV4JyJfcyk7Ci0gICAg
aWYgKCFzdGF0ZW1lbnQpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRp
Y2VzIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJy
b3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIGVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8g
ZmV0Y2ggaW5kZXggY291bnQsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIGlmIChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSA8IGV4
cGVjdGVkSW5kZXhDb3VudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pc3Np
bmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpCi17Ci0gICAgLy8gQ2hlY2sgYSB0YWJsZSBm
b3IgYSByZWZlcmVuY2UgdG8gVG9wTGV2ZWxEb21haW5zLCBhIHNpZ24gb2YgdGhlIG9sZCBzY2hl
bWEuCi0gICAgYXV0byBvbGRTY2hlbWEgPSBjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8iX3MpLmZpcnN0OwotICAgIHJldHVybiBuZWVkc05ld0Ny
ZWF0ZVRhYmxlU2NoZW1hKG9sZFNjaGVtYSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om5lZWRzVXBkYXRlZFNjaGVtYSgpCi17Ci0gICAgLy8gVGhlcmUg
YXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBvdGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUg
dG8gdXBncmFkZXMuCi0gICAgLy8gQWxsIG90aGVyIHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0
ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRoZXkgYXJlIGNvcnJlY3QuCi0gICAgaWYgKG1p
c3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlucygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlzc2luZ1VuaXF1ZUluZGljZXMoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFu
ZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBVTlVTRURfUEFSQU0odGFibGUpOwot
ICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBl
Y3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0KHRhYmxlKSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgRXhwZWN0ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGlu
c2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRlbWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCi17Ci0gICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1
YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRlZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBf
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBHUk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0
b3BGcmFtZURvbWFpbklEIl9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVt
ZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBz
dWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZS
T00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VE
b21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7Ci0KLSAgICBpZiAodGFibGUgPT0gIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxhc3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9N
IF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWlu
SUQsIHRvRG9tYWluSUQiX3MpOwotCi0gICAgaWYgKHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNv
cmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
SU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklE
LCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWluSUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQsIGZyb21Eb21haW5JRCJfcyk7Ci0KLSAgICBp
ZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKLSAgICAg
ICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFTEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRl
c3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJRCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tl
biwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
Il9zKTsKLQotICAgIGlmICh0YWJsZSA9PSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50IikKLSAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJ
TlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJp
Z2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9mQWRDbGljayksIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9E
ZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAg
Qlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcyk7Ci0KLSAg
ICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJU
IElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJTkNUICogRlJPTSBfIiwgdGFibGUpKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFU
b05ld1RhYmxlc0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAoIW5lZWRzVXBkYXRlZFNjaGVtYSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRy
YW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiBleHBlY3Rl
ZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkua2V5cygpKSB7Ci0gICAgICAgIGF1dG8gYWx0ZXJUYWJs
ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiQUxURVIgVEFC
TEUgIiwgdGFibGUsICIgUkVOQU1FIFRPIF8iLCB0YWJsZSkpOwotICAgICAgICBpZiAoIWFsdGVy
VGFibGUgfHwgYWx0ZXJUYWJsZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0
byByZW5hbWUgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY3JlYXRlU2NoZW1hKCkp
IHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2Fy
eSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0ZWRU
YWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgewotICAgICAgICBhdXRvIG1pZ3JhdGVUYWJs
ZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
dGFibGUpOwotICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxlRGF0
YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWln
cmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBtaWdyYXRlIHNjaGVtYSwg
ZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBkcm9wVGFibGVRdWVyeSA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiRFJPUCBUQUJMRSBfIiwgdGFibGUpKTsKLSAgICAg
ICAgaWYgKCFkcm9wVGFibGVRdWVyeSB8fCBkcm9wVGFibGVRdWVyeS0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWlncmF0ZURhdGFUb05ld1RhYmxl
c0lmTmVjZXNzYXJ5IGZhaWxlZCB0byBkcm9wIHRlbXBvcmFyeSB0YWJsZXMsIGVycm9yIG1lc3Nh
Z2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmICghY3JlYXRlVW5pcXVlSW5kaWNlcygpKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1
bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb2x1bW5zRm9yVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17Ci0g
ICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VT
dHJpbmcoIlBSQUdNQSB0YWJsZV9pbmZvKCIsIHRhYmxlTmFtZSwgIikiKSk7Ci0KLSAgICBpZiAo
IXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0Q29sdW1uc0Zyb21UYWJsZUlu
Zm9TdGF0ZW1lbnQgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnM7
Ci0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
YXV0byBuYW1lID0gc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpOwotICAgICAgICBjb2x1bW5zLmFw
cGVuZChuYW1lKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxl
KFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBleGlzdGluZ0NvbHVt
bnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQotewotICAgIEFTU0VS
VChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5zaXplKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0g
ICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKLSAgICAgICAgaWYgKGV4
aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQgQ09MVU1OICIsIGNv
bHVtbikpOwotICAgICAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQg
dG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRp
bmcgc3RhdGVtZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgfQotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRNaXNzaW5nQ29sdW1u
c0lmTmVjZXNzYXJ5KCkKLXsKLSAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9
ICJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKLSAgICBjb25zdCBhdXRv
IGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
Il9zOwotCi0gICAgYWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFt
ZSwgY29sdW1uc0ZvclRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRy
aWJ1dGVkQ29sdW1ucygpKTsKLSAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRl
ZFRhYmxlTmFtZSwgY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3Rl
ZEF0dHJpYnV0ZWRDb2x1bW5zKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5JblRhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgRXhp
c3RpbmdDb2x1bW5OYW1lJiYgZXhpc3RpbmdDb2x1bW5OYW1lLCBFeHBlY3RlZENvbHVtbk5hbWUm
JiBleHBlY3RlZENvbHVtbk5hbWUpCi17Ci0gICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFt
ZSwgIiBSRU5BTUUgQ09MVU1OICIsIGV4aXN0aW5nQ29sdW1uTmFtZSwgIiBUTyAiLCBleHBlY3Rl
ZENvbHVtbk5hbWUpKTsKLSAgICBpZiAoIXN0YXRlbWVudCkgewotICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIFVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0
byByZW5hbWUgY29sdW1uIGluIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3Np
bmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1
bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEF0
dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgotICAgIGNvbnN0IGF1dG8g
YXR0cmlidXRlZFRhYmxlTmFtZSA9ICJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3M7Ci0gICAgY29uc3QgYXV0byBvbGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4gPSAiZWFybGll
c3RUaW1lVG9TZW5kIl9zOwotICAgIGNvbnN0IGF1dG8gbmV3RWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zOwotICAgIGNvbnN0IGF1dG8gb2xk
QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbiA9ICJhdHRyaWJ1dGVPblNpdGVEb21haW5JRCJf
czsKLSAgICBjb25zdCBhdXRvIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiZGVz
dGluYXRpb25TaXRlRG9tYWluSUQiX3M7Ci0gICAgY29uc3QgYXV0byBmb3VuZEF0dHJpYnV0ZWRU
YWJsZUNvbHVtbnMgPSBjb2x1bW5zRm9yVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSk7Ci0KLSAg
ICBpZiAoZm91bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zLmNvbnRhaW5zKG9sZEVhcmxpZXN0VGlt
ZVRvU2VuZENvbHVtbikpCi0gICAgICAgIHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRh
YmxlTmFtZSwgb2xkRWFybGllc3RUaW1lVG9TZW5kQ29sdW1uLCBuZXdFYXJsaWVzdFRpbWVUb1Nl
bmRDb2x1bW4pOwotCi0gICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlu
cyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKSkKLSAgICAgICAgcmVuYW1lQ29sdW1u
SW5UYWJsZShhdHRyaWJ1dGVkVGFibGVOYW1lLCBvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uLCBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29sdW1uKTsKLQotICAgIC8vIFVuYXR0cmli
dXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50IGNhc2UuCi0gICAgYXV0byB1bmF0dHJpYnV0
ZWRUYWJsZU5hbWUgPSAiVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3M7Ci0g
ICAgYXV0byBmb3VuZFVuYXR0cmlidXRlZFRhYmxlQ29sdW1ucyA9IGNvbHVtbnNGb3JUYWJsZSh1
bmF0dHJpYnV0ZWRUYWJsZU5hbWUpOwotCi0gICAgaWYgKGZvdW5kVW5hdHRyaWJ1dGVkVGFibGVD
b2x1bW5zLmNvbnRhaW5zKG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4pKQotICAgICAg
ICByZW5hbWVDb2x1bW5JblRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRp
b25EZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFkZE1pc3NpbmdU
YWJsZXNJZk5lY2Vzc2FyeSgpCi17Ci0gICAgYXV0byBtaXNzaW5nVGFibGVzID0gY2hlY2tGb3JN
aXNzaW5nVGFibGVzSW5TY2hlbWEoKTsKLSAgICBpZiAoIW1pc3NpbmdUYWJsZXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKLQotICAgIGZvciAoYXV0byYgdGFibGUgOiAqbWlzc2luZ1RhYmxlcykgewotICAg
ICAgICBhdXRvIGNyZWF0ZVRhYmxlUXVlcnkgPSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVz
KCkuZ2V0KHRhYmxlKS5maXJzdDsKLSAgICAgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kU2xvdyhjcmVhdGVUYWJsZVF1ZXJ5KSkKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphZGRN
aXNzaW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmFk
ZE1pc3NpbmdUYWJsZXMgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW5B
bmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpCi17Ci0gICAgb3BlbklUUERhdGFiYXNlKCk7Ci0g
ICAgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0KLSAgICBTdHJpbmcgY3VycmVudFNj
aGVtYTsKLSAgICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuCi0gICAgICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3Rl
ciBXSEVSRSB0YmxfbmFtZT0nT2JzZXJ2ZWREb21haW5zJyJfcyk7Ci0gICAgICAgIGlmICghc3Rh
dGVtZW50KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRl
bWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFibGUuIik7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIE9ic2VydmVkRG9tYWlucyB0YWJs
ZSBhdCBhbGwsIG9yIHRoZXJlIGlzIGFuIGVycm9yIGV4ZWN1dGluZyB0aGUgZmV0Y2gsIGRlbGV0
ZSB0aGUgZmlsZS4KLSAgICAgICAgaWYgKHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBm
ZXRjaCBzY2hlbWEgZm9yIHRoZSBPYnNlcnZlZCBEb21haW5zIHRhYmxlLiIpOwotICAgICAgICAg
ICAgY2xvc2UoKTsKLSAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdl
RGlyZWN0b3J5UGF0aCk7Ci0gICAgICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1l
bnQtPmNvbHVtblRleHQoMSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKCFjdXJyZW50U2NoZW1hLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBJZiB0aGUgT2JzZXJ2ZWREb21haW5zIHNjaGVtYSBpbiB0aGUg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkaXJlY3RvcnkgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVt
YSwgZGVsZXRlIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgIC8vIEZJWE1FOiBNaWdyYXRlIG9sZCBP
YnNlcnZlZERvbWFpbnMgZGF0YSB0byBuZXcgdGFibGUgc2NoZW1hLgotICAgIGlmIChjdXJyZW50
U2NoZW1hICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEoKSAmJiBjdXJyZW50U2NoZW1h
ICE9IE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjFBbHRlcm5hdGUoKSkgewotICAgICAgICBj
bG9zZSgpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fc3RvcmFnZURpcmVjdG9y
eVBhdGgpOwotICAgICAgICBvcGVuSVRQRGF0YWJhc2UoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIC8vIFJlbmFtaW5nIGFuZCBhZGRpbmcgY29sdW1ucyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgbWlncmF0aW5nIHRvIGF2b2lkIG1pc21hdGNoZWQgb3IgbWlzc2luZyBjb2x1bW5zLgot
ICAgIHJlbmFtZUNvbHVtbnNJZk5lY2Vzc2FyeSgpOwotICAgIGFkZE1pc3NpbmdDb2x1bW5zSWZO
ZWNlc3NhcnkoKTsKLSAgICBtaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLX0K
LQotU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNjb3BlZFN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBBU0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmlu
ZyYgbG9nU3RyaW5nKSBjb25zdAotewotICAgIGlmICghc3RhdGVtZW50KSB7Ci0gICAgICAgIGF1
dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVl
cnkpOwotICAgICAgICBpZiAoIXN0YXRlbWVudE9yRXJyb3IpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjolcyBmYWlsZWQgdG8gcHJlcGFyZSBzdGF0ZW1lbnQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBsb2dTdHJpbmcuYXNjaWkoKS5kYXRhKCksIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyB9Owot
ICAgICAgICB9Ci0gICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudE9yRXJyb3IudmFsdWUoKS5t
b3ZlVG9VbmlxdWVQdHIoKTsKLSAgICAgICAgQVNTRVJUKG1fZGF0YWJhc2UuaXNPcGVuKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gU1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgeyBzdGF0ZW1l
bnQuZ2V0KCkgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW50ZXJydXB0KCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAg
bV9kYXRhYmFzZS5pbnRlcnJ1cHQoKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRT
dGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNv
dW50UXVlcnksICJpc0VtcHR5Il9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc0VtcHR5IGZhaWxlZCB0byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOwotfQotCi1ib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzKCkKLXsK
LSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4
ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykK
LSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KQot
ICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pCi0g
ICAgICAgIHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9w
RnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KQotICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCi0gICAgICAgIHx8ICFtX2RhdGFiYXNl
LmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCi0gICAgICAgIHx8ICFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VW5pcXVlSW5kZXhPcGVyYXRpbmdEYXRlcykKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCkKLSAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVl
SW5kZXhBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjcmVhdGVVbmlxdWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2JzZXJ2ZWREb21haW4pKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wTGV2ZWxEb21haW5zKSkgewotICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
cykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFz
ZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9kYXRh
YmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudCB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJv
cigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNy
ZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZUxv
YWRlZFRoaXJkUGFydHlTY3JpcHRzKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
bykpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewotICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPcGVyYXRpbmdEYXRlcykpIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9wZXJhdGluZ0RhdGVzIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fZGF0YWJhc2UuZXhl
Y3V0ZUNvbW1hbmQoY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgewot
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkZXN0cm95U3RhdGVtZW50cygpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX29ic2VydmVkRG9tYWluQ291bnRTdGF0ZW1l
bnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQgPSBudWxs
cHRyOwotICAgIG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudCA9IG51bGxwdHI7Ci0gICAgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9
IG51bGxwdHI7Ci0gICAgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0
cjsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3VwZGF0ZUlzU2No
ZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3RvcEZyYW1lTGlu
a0RlY29yYXRpb25zRnJvbUV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV90b3BGcmFt
ZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvdW50UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2NvdW50
UHJldmFsZW50UmVzb3VyY2VzV2l0aFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7
Ci0gICAgbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVt
ZW50ID0gbnVsbHB0cjsKLSAgICBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2dldEFsbFN1YlN0YXRpc3RpY3NTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fc3RvcmFnZUFj
Y2Vzc0V4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9nZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2xpbmtEZWNvcmF0aW9uRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAg
IG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fb2JzZXJ2ZWREb21haW5zRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZUFsbERhdGFTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1faW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRT
dGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3NldFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2Ns
ZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOwotICAgIG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBdHRyaWJ1dGlvbnNTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX2ZpbmRV
bmF0dHJpYnV0ZWRTdGF0ZW1lbnQgPSBudWxscHRyOwotICAgIG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQgPSBudWxscHRyOwotICAgIG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RUaW1lVG9T
ZW5kU3RhdGVtZW50ID0gbnVsbHB0cjsKLSAgICBtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCA9IG51bGxwdHI7Ci0gICAgbV9tYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VTdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgPSBu
dWxscHRyOwotICAgIG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCA9IG51bGxwdHI7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbklEKGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gY2FuIG9ubHkgYmUgY2FsbGVkIG9uIGRvbWFpbnMgbm90
IGluIHRoZSBkYXRhYmFzZS4iKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudCwgaW5zZXJ0
T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydE9ic2VydmVkRG9tYWluIl9zKTsKLSAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KFJl
Z2lzdHJhYmxlRG9tYWluSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91
YmxlKExhc3RTZWVuSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmxhc3RTZWVuLnNlY29uZHNTaW5jZUVw
b2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MuaGFkVXNlcklu
dGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
RG91YmxlKE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsIGxvYWRTdGF0aXN0aWNz
Lm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUo
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChHcmFu
ZGZhdGhlcmVkSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwg
bG9hZFN0YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgbG9hZFN0
YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsIGxvYWRT
dGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25JbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nl
c3NBUElJbmRleCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
U3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGxv
YWRTdGF0aXN0aWNzLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291cmNlKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWRE
b21haW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjppbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiBzdGF0ZW1lbnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGZpcnN0RG9tYWluSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0Ci17Ci0gICAgaWYgKCFm
aXJzdERvbWFpbklEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXN0YXRlbWVudAotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKmZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHNlY29uZERvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gISFzdGF0ZW1lbnQtPmNvbHVtbkludCgw
KTsKLX0KLQotc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnksICJkb21haW5JRCJfcyk7Ci0gICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4u
c3RyaW5nKCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpk
b21haW5JREZyb21TdHJpbmcgZmFpbGVkLiBFcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19T
VFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5JbnQoMCk7Ci19Ci0KLVN0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbkxpc3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAo
YXV0byYgdG9wRnJhbWVSZXNvdXJjZSA6IGRvbWFpbkxpc3QpIHsKLSAgICAgICAgLy8gSW5zZXJ0
IHF1ZXJ5IHdpbGwgZmFpbCBpZiB0b3AgZnJhbWUgZG9tYWluIGlzIG5vdCBhbHJlYWR5IGluIHRo
ZSBkYXRhYmFzZQotICAgICAgICBpZiAoZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVSZXNvdXJjZSkuc2Vjb25kKQotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsICciJywgdG9wRnJhbWVSZXNv
dXJjZS5zdHJpbmcoKSwgJyInKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQot
ewotICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7Ci0gICAgCi0gICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKLSAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChzdGF0ZW1lbnQuY29udGFpbnMoIlJFUExBQ0Ui
KSkgewotICAgICAgICBpZiAoaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5iaW5kRG91Ymxl
KDIsIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSykgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwTGlzdCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChpbnNlcnRSZWxhdGlvbnNoaXBTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0
aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFp
bklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICAKLSAgICBpZiAoIXJl
Z2lzdHJhYmxlRG9tYWluSUQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFi
bGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRRdWVyeSwgbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCwgcmVnaXN0cmFibGVEb21h
aW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9t
YWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lz
dHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlz
dChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0YXRpc3RpY3Muc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkp
OwotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlv
bnNGcm9tUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSwg
cmVnaXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNRdWVyeSwgbG9hZFN0YXRpc3Rp
Y3MudG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgcmVnaXN0cmFibGVEb21haW5JRC52
YWx1ZSgpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlJiBtZW1vcnlTdG9yZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICghaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5z
YWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8m
IHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9yZS5kYXRhKCk7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlIGluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9y
IGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCi0gICAgLy8gY2FuIHJlZmVyIHRvIHRo
ZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMg
OiBzdGF0aXN0aWNzTWFwLnZhbHVlcygpKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKHN0YXRpc3RpYyk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1lcmdlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCogY3VycmVudCwgY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgb3RoZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gY3VycmVudFJlZ2lzdHJhYmxlRG9tYWluID0gY3VycmVu
dC0+Y29sdW1uVGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4KTsKLSAgICBhdXRvIGN1cnJlbnRM
YXN0U2VlbiA9IGN1cnJlbnQtPmNvbHVtbkRvdWJsZShMYXN0U2VlbkluZGV4KTsKLSAgICBhdXRv
IGN1cnJlbnRNb3N0UmVjZW50VXNlckludGVyYWN0aW9uID0gY3VycmVudC0+Y29sdW1uRG91Ymxl
KE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgpOwotICAgIGJvb2wgY3VycmVudEdy
YW5kZmF0aGVyZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KTsKLSAg
ICBib29sIGN1cnJlbnRJc1ByZXZhbGVudCA9IGN1cnJlbnQtPmNvbHVtbkludChJc1ByZXZhbGVu
dEluZGV4KTsKLSAgICBib29sIGN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpOwotICAgIHVuc2lnbmVkIGN1cnJlbnREYXRhUmVj
b3Jkc1JlbW92ZWQgPSBjdXJyZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgp
OwotICAgIGJvb2wgY3VycmVudElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwg
PSBjdXJyZW50LT5jb2x1bW5JbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bEluZGV4KTsKLQotICAgIEFTU0VSVChjdXJyZW50UmVnaXN0cmFibGVEb21haW4gPT0gb3RoZXIu
cmVnaXN0cmFibGVEb21haW4uc3RyaW5nKCkpOwotCi0gICAgaWYgKFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhjdXJyZW50TGFzdFNlZW4pIDwgb3RoZXIubGFzdFNlZW4pCi0gICAgICAgIHVwZGF0
ZUxhc3RTZWVuKG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCBvdGhlci5sYXN0U2Vlbik7Ci0KLSAg
ICBpZiAoIW90aGVyLmhhZFVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICAvLyBJZiBtb3N0IHJl
Y2VudCB1c2VyIGludGVyYWN0aW9uIHRpbWUgaGFzIGJlZW4gcmVzZXQgZG8gc28gaGVyZSB0b28u
Ci0gICAgICAgIGlmICghb3RoZXIubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpCi0gICAg
ICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVnaXN0cmFibGVEb21haW4sIGZhbHNl
LCB7IH0pOwotICAgIH0gZWxzZQotICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24ob3RoZXIucmVn
aXN0cmFibGVEb21haW4sIHRydWUsIHN0ZDo6bWF4KFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhj
dXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiksIG90aGVyLm1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKSk7Ci0KLSAgICBpZiAob3RoZXIuZ3JhbmRmYXRoZXJlZCAmJiAhY3VycmVu
dEdyYW5kZmF0aGVyZWQpCi0gICAgICAgIHNldEdyYW5kZmF0aGVyZWQob3RoZXIucmVnaXN0cmFi
bGVEb21haW4sIHRydWUpOwotICAgIGlmIChvdGhlci5pc1ByZXZhbGVudFJlc291cmNlICYmICFj
dXJyZW50SXNQcmV2YWxlbnQpCi0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluKTsKLSAgICBpZiAob3RoZXIuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Ug
JiYgIWN1cnJlbnRJc1ZlcnlQcmV2YWxlbnQpCi0gICAgICAgIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgaWYgKG90aGVyLmRhdGFSZWNvcmRz
UmVtb3ZlZCA+IGN1cnJlbnREYXRhUmVjb3Jkc1JlbW92ZWQpCi0gICAgICAgIHVwZGF0ZURhdGFS
ZWNvcmRzUmVtb3ZlZChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIuZGF0YVJlY29yZHNS
ZW1vdmVkKTsKLSAgICBpZiAob3RoZXIuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVz
b3VyY2UgJiYgIWN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKQot
ICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKG90aGVyLnJl
Z2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgc3RhdGlzdGljKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0g
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQsIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVF1ZXJ5LCAibWVyZ2VTdGF0aXN0aWMiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjptZXJnZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMg
bm90IGZvdW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQo
KSwgc3RhdGlzdGljKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmIHN0
YXRpc3RpY3MpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKHN0
YXRpc3RpY3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBpZiAoIWRvbWFpbklEKHN0YXRp
c3RpYy5yZWdpc3RyYWJsZURvbWFpbikpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gaW5z
ZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWVyZ2VTdGF0aXN0aWNzIGlu
c2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWVyZ2VTdGF0
aXN0aWMoc3RhdGlzdGljKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBm
b3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28gd2UKLSAgICAvLyBjYW4gcmVmZXIgdG8g
dGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMuCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0
aWMgOiBzdGF0aXN0aWNzKQotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRp
c3RpYyk7Ci19Ci0KLXN0YXRpYyBBU0NJSUxpdGVyYWwgam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0
aW5nKCkKLXsKLSAgICByZXR1cm4gIlNFTEVDVCBkb21haW5JRCwiCi0gICAgICAgICIoY291bnRT
dWJGcmFtZVVuZGVyVG9wRnJhbWUgKyBjb3VudFN1YlJlc291cmNlVW5kZXJUb3BGcmFtZSArIGNv
dW50VW5pcXVlUmVkaXJlY3RUbykgYXMgc3VtICAiCi0gICAgICAgICJGUk9NICggIgotICAgICAg
ICAiU0VMRUNUICIKLSAgICAgICAgICAgICJkb21haW5JRCwgIgotICAgICAgICAgICAgIkNPVU5U
KERJU1RJTkNUIGYudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJGcmFtZVVuZGVyVG9wRnJh
bWUsICIKLSAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCByLnRvcEZyYW1lRG9tYWluSUQpIGFz
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lLCAiCi0gICAgICAgICAgICAiQ09VTlQoRElT
VElOQ1QgdG9Eb21haW5JRCkgYXMgY291bnRVbmlxdWVSZWRpcmVjdFRvICIKLSAgICAgICAgIkZS
T00gIgotICAgICAgICAiT2JzZXJ2ZWREb21haW5zIG8gIgotICAgICAgICAiTEVGVCBKT0lOIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgZiBPTiBvLmRvbWFpbklEID0gZi5zdWJGcmFtZURv
bWFpbklEICIKLSAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zIHIgT04gby5kb21haW5JRCA9IHIuc3VicmVzb3VyY2VEb21haW5JRCAiCi0gICAgICAgICJM
RUZUIEpPSU4gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB1IE9OIG8uZG9tYWluSUQgPSB1
LnN1YnJlc291cmNlRG9tYWluSUQgIgotICAgICAgICAiV0hFUkUgaXNQcmV2YWxlbnQgTElLRSA/
ICIKLSAgICAgICAgImFuZCBoYWRVc2VySW50ZXJhY3Rpb24gTElLRSA/ICIKLSAgICAgICAgIkdS
T1VQIEJZIGRvbWFpbklEKSBPUkRFUiBCWSBzdW0gREVTQzsiX3M7Ci19Ci0KLVZlY3RvcjxXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJz
dFBhcnR5PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21h
aW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRoaXJkUGFydHlEb21haW4pIGNvbnN0Ci17
Ci0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRB
bGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRBbGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5R
dWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7
Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5i
aW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGlyZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFp
bklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXRUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbiwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19T
VFJJTkcsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IHRoaXJkUGFydHlEYXRhRm9y
U3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiBmaXJzdFBh
cnR5RG9tYWluID0gUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3Ry
YWJsZURvbWFpblN0cmluZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQobV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpKTsKLSAgICAgICAgdGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zLmFwcGVuZElmTm90Q29udGFpbnMoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQ
YXJ0eSB7IGZpcnN0UGFydHlEb21haW4sIGhhc1N0b3JhZ2VBY2Nlc3MoZmlyc3RQYXJ0eURvbWFp
biwgdGhpcmRQYXJ0eURvbWFpbiksIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAodGhp
cmRQYXJ0eURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbikgfSk7Ci0gICAgfQotICAgIHJldHVybiB0
aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7Ci19Ci0KLXN0YXRpYyBi
b29sIGhhc0JlZW5UaGlyZFBhcnR5KHVuc2lnbmVkIHRpbWVzVW5kZXJGaXJzdFBhcnR5KQotewot
ICAgIHJldHVybiB0aW1lc1VuZGVyRmlyc3RQYXJ0eSA+IDA7Ci19Ci0KLVZlY3RvcjxXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiB0aGlyZFBhcnR5RGF0YUxpc3Q7
Ci0gICAgY29uc3QgYXV0byBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlciA9IHRoaXJkUGFy
dHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpB
bGwgPyAiJSIgOiAiMSI7Ci0gICAgYXV0byBzb3J0ZWRTdGF0aXN0aWNzID0gbV9kYXRhYmFzZS5w
cmVwYXJlU3RhdGVtZW50KGpvaW5TdWJTdGF0aXN0aWNzRm9yU29ydGluZygpKTsKLSAgICBpZiAo
IXNvcnRlZFN0YXRpc3RpY3MKLSAgICAgICAgfHwgc29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQo
MSwgcHJldmFsZW50RG9tYWluc0JpbmRQYXJhbWV0ZXIpCi0gICAgICAgIHx8IHNvcnRlZFN0YXRp
c3RpY3MtPmJpbmRUZXh0KDIsICIlIikgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OwotICAgIH0KLSAgICB3
aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkpIHsK
LSAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGljcy0+
Y29sdW1uSW50KDApOwotICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVnaXN0
cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhn
ZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7Ci0gICAgICAg
ICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5RGF0
YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGlyZFBh
cnR5RG9tYWluKSB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdGhpcmRQYXJ0eURh
dGFMaXN0OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJl
Y29yZHNSZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIpKTsKLSAgICBpZiAoIWRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0
aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNp
Z25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4g
UmV0dXJuaW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJh
Y2VCYWNrKTsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci0gICAgfQot
ICAgIAotICAgICsrbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIFN0ZFNldDx1bnNpZ25l
ZD4gbmV3bHlJZGVudGlmaWVkRG9tYWluczsKLSAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
IElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3Mp
OwotICAgIGlmICghZmluZFN1YnJlc291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50
KDEsIHByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKGZp
bmRTdWJyZXNvdXJjZXMtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIGludCBuZXdE
b21haW5JRCA9IGZpbmRTdWJyZXNvdXJjZXMtPmNvbHVtbkludCgwKTsKLSAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbklEKTsKLSAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCi0gICAgICAgICAgICBu
ZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Ci0gICAgfQotCi0gICAg
YXV0byBmaW5kVG9wRnJhbWVzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERv
bWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50
ID0gMCJfcyk7Ci0gICAgaWYgKCFmaW5kVG9wRnJhbWVzCi0gICAgICAgIHx8IGZpbmRUb3BGcmFt
ZXMtPmJpbmRJbnQoMSwgcHJpbWFyeURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICB3aGlsZSAoZmluZFRvcEZyYW1lcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAg
aW50IG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1lcy0+Y29sdW1uSW50KDApOwotICAgICAgICBh
dXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQo
bmV3RG9tYWluSUQpOwotICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKLSAgICAgICAg
ICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbklEKTsKLSAgICB9Ci0K
LSAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQotICAgICAgICByZXR1cm4g
bnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLQotICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5
SWRlbnRpZmllZERvbWFpbnMpCi0gICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4o
ZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNp
dmVDYWxscyk7Ci0KLSAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OwotICAg
IGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0
YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3Vi
cmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxl
bnQgPSAxIl9zKTsKLSAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpCi0gICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJyZXNv
dXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgIH0KLQotICAgIGF1dG8g
dG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgi
U0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQg
RlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21h
aW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7Ci0gICAgaWYgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJl
Y3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICAgICAgcHJldmFsZW50
RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKLSAgICB9Ci0KLSAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKLSAgICBpZiAoIW1hcmtQcmV2YWxlbnRTdGF0
ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLUhhc2hNYXA8dW5zaWduZWQsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsK
LSAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlz
UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAi
X3MpOwotICAgIGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7Ci0gICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0g
U1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
Ci0gICAgICAgICAgICBBU1NFUlQoa2V5KTsKLSAgICAgICAgICAgIGlmICgha2V5KQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1u
VGV4dCgxKSkKLSAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOwotICAgICAgICAgICAgcmVz
dWx0cy5hZGQoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBh
dXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOwotCi0g
ICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0gICAgaWYgKHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgd2hpbGUg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAgICAgICAgICAgIGlmICgh
ZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9
IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJT
RUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7Ci0g
ICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgewotICAg
ICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LT5jb2x1bW5JbnQoMCkpOwotICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKLSAg
ICAgICAgICAgIGlmICghZG9tYWluSUQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LT52
YWx1ZS5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5J
bnQoMSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93
KG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFp
bklEKSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21h
aW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21h
aW5JRCIpKTsKLSAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVt
ZW50KSB7Ci0gICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRT
dGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZG9t
YWluSUQpOwotICAgICAgICAgICAgaWYgKCFkb21haW5JRCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsK
LSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1l
bnQtPmNvbHVtbkludCgxKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFp
bklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQg
SU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikp
OwotICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKLSAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7Ci0gICAgICAg
ICAgICBpZiAoIWRvbWFpbklEKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwotICAgICAgICAgICAgaWYg
KHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQotICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gbm90VmVyeVByZXZhbGVu
dFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7Ci0gICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNl
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc2hvdWxkU2tpcChyZXNvdXJjZVN0YXRpc3RpYy5y
ZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRv
IG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNl
KHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwg
cmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNv
dXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0
aWMucHJldmFsZW5jZSk7Ci0gICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3Rh
dGlzdGljLnByZXZhbGVuY2UpCi0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7Ci0gICAgfQot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgbWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKLSAgICByZWNsYXNzaWZ5UmVzb3Vy
Y2VzKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJ1
bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgbV9kYXRhYmFzZS5ydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1l
RG9tYWluJiBzdWJGcmFtZURvbWFpbikgY29uc3QKLXsKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQs
IHN0b3JhZ2VBY2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOwotICAgIHJl
dHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFt
ZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4p
OwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpoYXNTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAo
Y29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikpIHsKLSAgICBjYXNl
IENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25D
b29raWVQb2xpY3k6Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPmhhc0Nvb2tpZXMoc3ViRnJhbWVEb21haW4s
IFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29va2llQWNjZXNzOjpP
bmx5SWZHcmFudGVkOgotICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgotICAgICAgICBicmVhazsK
LSAgICB9OwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
c3RvcmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQs
IHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVI
YW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBw
YWdlSUQsIFtzdG9yZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3Rp
Y3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBQYWdlSWRlbnRp
ZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7Ci0gICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRv
IGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoY29va2llQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURv
bWFpbikpIHsKLSAgICBjYXNlIENvb2tpZUFjY2Vzczo6Q2Fubm90UmVxdWVzdDoKLSAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oSVRQRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIg
UFJJVkFURV9MT0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlv
biBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIltJVFBdIENhbm5v
dCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwg
Iicgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
X3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNz
U3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OgotICAgICAgICBpZiAoVU5MSUtFTFko
ZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJ
VFBEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9M
T0dfU1RSSU5HICIgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVuZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkg
c3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBmcm9tIHNldHRpbmcgY29va2llcy4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZl
bDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgc2luY2UgaXRzIGNvb2tpZXMg
YXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiBOb3RlIHRoYXQgdGhlIHVu
ZGVybHlpbmcgY29va2llIHBvbGljeSBtYXkgc3RpbGwgYmxvY2sgdGhpcyB0aGlyZC1wYXJ0eSBm
cm9tIHNldHRpbmcgY29va2llcy4iX3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRs
ZWQgYmVsb3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGF1dG8gdXNlcldhc1Byb21w
dGVkRWFybGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOwotICAgIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8pIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0
aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJSIgUFJJVkFURV9MT0dfU1RSSU5H
ICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBB
Ym91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBh
Y2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHVuZGVyICciX3MsIHRv
cEZyYW1lRG9tYWluLnN0cmluZygpLCAiJyBvciBub3QuIl9zKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJv
bXB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRF
YXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Ci0gICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKElUUERlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJSIgUFJJ
VkFURV9MT0dfU1RSSU5HICIgdW5kZXIgJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltJVFBdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICciX3MsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLCAiJyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicuIl9z
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRp
bWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRv
bWFpbklEID0gPyJfcyk7Ci0gICAgaWYgKCFpbmNyZW1lbnRTdG9yYWdlQWNjZXNzCi0gICAgICAg
IHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPmJpbmRJbnQoMSwgKnN1YkZyYW1lU3RhdHVzLnNl
Y29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NU
UklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyLCBzY29w
ZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxlIHsKLSAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIod2FzR3JhbnRlZCA9PSBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6WWVzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKLXsK
LSAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKLSAgICB9Ci0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFp
biYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgUGFnZUlkZW50aWZp
ZXIgcGFnZUlELCBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gcHJvbXB0V2FzU2hvd24sIFN0
b3JhZ2VBY2Nlc3NTY29wZSBzY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzV2FzR3JhbnRlZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGlmIChwcm9tcHRXYXNTaG93biA9PSBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewotICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVz
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVE
b21haW4pOwotICAgICAgICBpZiAoIXN1YkZyYW1lU3RhdHVzLnNlY29uZCkgewotICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpzdWJGcmFtZVN0YXR1cy5zZWNvbmQpOwotICAgIH0KLQotICAgIGdyYW50
U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21h
aW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3Rk
OjpvcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVy
LCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1l
RG9tYWluKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFu
dGVkOjpZZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByb21wdFdhc1No
b3duTm93T3JFYXJsaWVyID09IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0g
ICAgICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
LSAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0g
QWRkZWRSZWNvcmQ6Ok5vKTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBpZiAoIU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbjo6Y2FuUmVxdWVzdFN0b3JhZ2VBY2Nlc3NGb3JMb2dpbk9yQ29tcGF0
aWJpbGl0eVB1cnBvc2VzV2l0aG91dFByaW9yVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWlu
LCB0b3BGcmFtZURvbWFpbikpCi0gICAgICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVyYWN0
aW9uKHN1YkZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykpOwotI2VuZGlm
Ci0gICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSA9PSBTdG9yYWdlQWNjZXNz
UHJvbXB0V2FzU2hvd246Olllcyk7Ci0jZW5kaWYKLSAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KHN1YkZyYW1lRG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHNjb3BlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVE
b21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHNjb3BlLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RvcmVdKFN0b3JhZ2VBY2Nl
c3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3YXNHcmFudGVkLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKLQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgewotICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQotICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgfQotCi0g
ICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBidWlsZExpc3QoZG9tYWlu
cyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLVZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURv
bWFpbnNUb0Jsb2NrOwotICAgIHByaW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDIpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7
Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IGZvciBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlIiwgdGhpcyk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBw
ZW5kKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7Ci0KLSAgICBpZiAoIWRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOwotICAgICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IGZvciBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIiwgdGhpcyk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
Ci0gICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKLQotICAgICAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAl
IiBQUklWQVRFX0xPR19TVFJJTkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIERpZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSgpLnN0cmluZygpLCAiJyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iX3MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkLCBi
b29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1l
U2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKLSAgICBib29sIGFyZVRhcmdl
dEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47
Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nh
cnkoKTsKLQotICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7Ci0gICAgaWYg
KCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKLSAgICAgICAgYXV0byB0YXJn
ZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
YXJnZXREb21haW4pOwotICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQpIHsKLSAgICAg
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbiB3YXMgbm90IGNv
bXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IG9mIHRhcmdldCBkb21haW4iLCB0
aGlzKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVMYXN0
U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRpbWVSZXNv
bHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOwotICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBMaXN0KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOwot
ICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmICgh
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7Ci0gICAgICAgIGlmIChpc01haW5G
cmFtZSkgewotICAgICAgICAgICAgYm9vbCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRo
b3V0VXNlckludGVyYWN0aW9uID0gIXdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyICYmIGRl
bGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQgPCBwYXJhbWV0ZXJzKCkubWluRGVsYXlBZnRl
ck1haW5GcmFtZURvY3VtZW50TG9hZFRvTm90QmVBUmVkaXJlY3Q7Ci0gICAgICAgICAgICBpZiAo
aXNSZWRpcmVjdCB8fCB3YXNOYXZpZ2F0ZWRBZnRlclNob3J0RGVsYXlXaXRob3V0VXNlckludGVy
YWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFp
bik7Ci0gICAgICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAgICAgICAg
ICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCB8fCAhcmVkaXJlY3RpbmdEb21haW5SZXN1bHQu
c2Vjb25kKSB7Ci0gICAgICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRl
bXB0IG9mIHRhcmdldCBvciByZWRpcmVjdGluZyBkb21haW4gKGlzTWFpbkZyYW1lKSIsIHRoaXMp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9
KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0p
LCAqcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKLQotICAgICAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVCTElDX0xP
R19TVFJJTkcgIiBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8gJSIgUFVCTElDX0xP
R19TVFJJTkcgIi4iLCBzb3VyY2VEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdGFyZ2V0
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVz
c2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJEaWQgc2V0ICciLCBzb3VyY2VEb21haW4uc3Ry
aW5nKCksICInIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAnIiwgdGFyZ2V0RG9t
YWluLnN0cmluZygpLCAiJy4iKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyBzb3VyY2VEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsKLSAgICAgICAgICAgICAg
ICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21h
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOwotICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwotICAgICAg
ICAgICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kIHx8ICFyZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dC5zZWNvbmQpIHsKLSAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFt
ZU5hdmlnYXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCBvZiB0YXJnZXQgb3IgcmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5
LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0
aW5nRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBMaXN0KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQp
OwotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCi0gICAgICAgIHNjaGVkdWxl
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nQ3Jvc3NTaXRlTG9hZFdpdGhMaW5r
RGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiBmcm9tRG9tYWluLCBjb25zdCBO
YXZpZ2F0ZWRUb0RvbWFpbiYgdG9Eb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKGZyb21Eb21haW4gIT0gdG9Eb21haW4pOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHRvRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odG9Eb21haW4pOwotICAgIGlmICghdG9Eb21haW5SZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRo
aXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cExpc3QodG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+KHsgZnJvbURvbWFpbiB9KSwgKnRvRG9tYWluUmVzdWx0LnNlY29uZCk7Ci0gICAg
Ci0gICAgaWYgKGlzUHJldmFsZW50UmVzb3VyY2UoZnJvbURvbWFpbikpCi0gICAgICAgIHNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwodG9Eb21haW4sIHRydWUpOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0K
LSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0g
ICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHJlbW92ZVJlZGlyZWN0c1Rv
U2luY2VTYW1lU2l0ZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBX
SEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghcmVtb3ZlUmVkaXJlY3RzVG9T
aW5jZVNhbWVTaXRlCi0gICAgICAgIHx8IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+
YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8
IHJlbW92ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVy
YWN0aW9uKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIGF1
dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAi
c2V0VXNlckludGVyYWN0aW9uIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFj
dGlvbiwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUg
PSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICBp
ZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNl
ckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBib29sIGRpZEhhdmVQcmV2
aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJh
dGluZ0RhdGVzV2luZG93OjpMb25nKTsKLSAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0
cnVlLCBXYWxsVGltZTo6bm93KCkpOwotCi0gICAgaWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRl
cmFjdGlvbikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5U
cmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCF0YXJnZXRSZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0
IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRVc2VySW50
ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKLQotICAgIGF1dG8gcmVtb3ZlU3RvcmFnZUFj
Y2VzcyA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiREVMRVRFIEZST00gU3RvcmFnZUFj
Y2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfcyk7Ci0gICAgaWYg
KCFyZW1vdmVTdG9yYWdlQWNjZXNzCi0gICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPmJp
bmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2FsbCB0
byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQotICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91cyB1
c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9uKCks
Ci0gICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KLSAgICB1cGRhdGVDb29raWVCbG9ja2lu
ZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dp
bmRvdykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSwgImhhc0hhZFVzZXJJbnRlcmFj
dGlvbiJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uID0gISFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZy
b21SYXdTZWNvbmRzKHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEpKTsKLQotICAgIGlm
IChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpKSB7Ci0gICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgotICAgICAgICAvLyBTZXQgdGltZXN0
YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdwotICAgICAgICAvLyBp
dCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgotICAgICAgICBj
bGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4sIFtdIHsgfSk7Ci0gICAgICAgIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
LQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7Ci0gICAg
aWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlIGRvbWFpbklEIHNob3VsZCBleGlzdCBidXQgd2FzIG5vdCBm
b3VuZC4iLCB0aGlzKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQsIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnksICJzZXRQcmV2YWxlbnRSZXNv
dXJjZSJfcyk7Ci0gICAgaWYgKCFzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dAotICAgICAgICB8fCBzY29wZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+Ymlu
ZEludCgxLCAxKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCi0gICAgICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSB0aGlz
LT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQs
IHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2Ug
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlIl9zKTsKLSAgICBpZiAobmV3UHJldmFsZW5jZSA9
PSBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCkgewotICAgICAgICBpZiAoIXNjb3Bl
ZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudAotICAgICAgICAgICAgfHwgc2Nv
cGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9
IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RkU2V0PHVuc2lnbmVkPiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7Ci0gICAgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJsZURvbWFpbklELCBu
b25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOwotICAgIHNldERvbWFpbnNBc1ByZXZh
bGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykpOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxl
bnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBhdXRvIGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoZG9t
YWlucyksICIpIikpOwotICAgIGlmICghZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50IHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmlu
ZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIGlmIChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7Ci0gICAgICAgIG1fZGF0
YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRl
bWVudCwgZ2V0QWxsRG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
VmVjdG9yPFN0cmluZz4gZG9tYWluczsKLSAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVw
KCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50
LT5jb2x1bW5UZXh0KDApKTsKLSAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5z
LmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIHJlc3VsdDsKLSAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6
XG5cbiIpOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKLSAgICAgICAgcmVzb3Vy
Y2VUb1N0cmluZyhyZXN1bHQsIGRvbWFpbik7Ci0KLSAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0g
YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhKCk7Ci0gICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOwotICAgICAg
ICBmb3IgKGF1dG8gdGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh0aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOwotICAgIH0KLSAgICBjb21w
bGV0aW9uSGFuZGxlcihyZXN1bHQudG9TdHJpbmcoKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFNRTGl0ZVN0
YXRlbWVudEF1dG9SZXNldFNjb3BlJiBwcmVkaWNhdGVTdGF0ZW1lbnQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoIXByZWRpY2F0ZVN0YXRlbWVudAotICAgICAgICB8fCBwcmVkaWNhdGVT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRv
IGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
cmV0dXJuICEhcHJlZGljYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLWJvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgaXNQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJuIHByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGlzVmVyeVByZXZhbGVu
dFJlc291cmNlUXVlcnksICJpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Ci0gICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluKTsKLX0KLQot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlz
dHNTdGF0ZW1lbnQsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5LCAi
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyIl9zKTsKLSAgICByZXR1cm4gcmVsYXRpb25z
aGlwRXhpc3RzKHNjb3BlZFN0YXRlbWVudCwgZG9tYWluSUQoc3VicmVzb3VyY2VEb21haW4pLCB0
b3BGcmFtZURvbWFpbik7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYg
c3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29u
c3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOwotICAgIHJldHVybiBy
ZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSwgImlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyJfcyk7Ci0gICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhzY29wZWRTdGF0ZW1lbnQs
IGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFy
ZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFs
ZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1w
dCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGF1dG8gc2NvcGVk
U3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZSJfcyk7Ci0gICAgCi0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZh
bHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0cmFu
c2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBp
bnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBkYXRlR3Jh
bmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0R3JhbmRm
YXRoZXJlZCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVk
U3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldElzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbiwgYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1v
dmFsIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxRdWVyeSwgInNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWwiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgfQotfQotCi1TZWNvbmRzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHN1YkZyYW1lRG9tYWluSUQgPSBkb21haW5JRChzdWJEb21haW4p
OwotICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHRvcEZyYW1lRG9tYWluSUQgPSBkb21haW5J
RCh0b3BGcmFtZURvbWFpbik7Ci0KLSAgICBpZiAoIXN1YkZyYW1lRG9tYWluSUQgfHwgIXRvcEZy
YW1lRG9tYWluSUQpCi0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCB9OwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVz
dGFtcFN0YXRlbWVudCwgZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFF1ZXJ5LCAiZ2V0
TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCJfcyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpzdWJGcmFtZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIs
ICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDMsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDQsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDUsICpzdWJGcmFtZURv
bWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50
KDYsICp0b3BGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5iaW5kSW50KDcsICpzdWJGcmFtZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDgsICp0b3BGcmFtZURvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0TW9zdFJlY2VudGx5
VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLSAgICB9Ci0gICAgaWYgKHNj
b3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKLQot
ICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMCkgfTsK
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgaXNHcmFuZGZh
dGhlcmVkUXVlcnksICJpc0dyYW5kZmF0aGVyZWQiX3MpOwotICAgIHJldHVybiBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0Iiwg
dGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBt
YWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFt
ZSBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJh
bWVEb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNv
bmQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGb3IgY29uc2lzdGVu
Y3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9w
IGZyYW1lIGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4o
eyB0b3BGcmFtZURvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0VG8gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0
ZW1wdCIsIHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0
ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSBy
ZWRpcmVjdCBkb21haW4uCi0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsg
cmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAgIGlmICghcmVzdWx0
LnNlY29uZCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9t
YWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2Fy
eSgpOwotCi0gICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RU
byB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4oeyByZWRpcmVjdERvbWFpbiB9KSwgKnJlc3VsdC5zZWNvbmQpOwotICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNp
dGVTdHJpY3RFbmZvcmNlbWVudFF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJl
ZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4m
IHJlZGlyZWN0RG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKLSAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKLSAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20g
d2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4u
Ci0gICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyByZWRpcmVjdERvbWFpbiB9
KSwgKnJlc3VsdC5zZWNvbmQpOwotfQotCi1zdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKLSAgICAgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQKLSAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCAwIH07Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewotICAgICAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9t
YWluKTsKLSAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKG5ld09ic2VydmF0
aW9uKTsKLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJP
UihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIGluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBjb21wbGV0ZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgc3Rk
OjpudWxsb3B0IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9t
YWluSUQoZG9tYWluKS52YWx1ZSgpIH07Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCi17Ci0gICAgbV9kYXRhYmFz
ZS5jbGVhckFsbFRhYmxlcygpOwotCi0gICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJEYXRhYmFzZUNvbnRlbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIsIGRhdGFiYXNlIHBhdGg6ICUiIFBSSVZBVEVfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlbW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKLXsKLSAgICBhdXRvIGRvbWFpbklEVG9SZW1vdmUgPSBkb21haW5JRChkb21haW4p
OwotICAgIGlmICghZG9tYWluSURUb1JlbW92ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlQWxs
RGF0YVN0YXRlbWVudCwgcmVtb3ZlQWxsRGF0YVF1ZXJ5LCAicmVtb3ZlRGF0YUZvckRvbWFpbiJf
cyk7Ci0gICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsICpkb21haW5JRFRvUmVtb3ZlKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YWxsRG9t
YWlucygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBh
dXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldEFsbERvbWFp
bnNTdGF0ZW1lbnQsIGdldEFsbERvbWFpbnNRdWVyeSwgImFsbERvbWFpbnMiX3MpOwotICAgIGlm
ICghc2NvcGVkU3RhdGVtZW50KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBkb21haW5zOwotICAgIHdoaWxlIChzY29wZWRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBkb21haW5zLmFwcGVuZChSZWdpc3RyYWJsZURv
bWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHNjb3BlZFN0
YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotICAgIHJldHVybiBkb21haW5zOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKLSAgICBjbGVhck9w
ZXJhdGluZ0RhdGVzKCk7Ci0KLSAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNr
QWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLQotICAgIHJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdncmVnYXRvcl0geyB9KTsKLQotICAgIGF1
dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwgeyB9IH07Ci0gICAgdXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7
IH0pOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjphcmVB
bGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pCi17Ci0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9
PSBUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAh
aGFzSGFkVXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRv
dzo6TG9uZykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1Db29raWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tp
ZUFjY2Vzcyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3Rh
dGVtZW50KCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpOwotICAgIGlmICghc3Rh
dGVtZW50IHx8IHN0YXRlbWVudC0+YmluZFRleHQoMSwgc3VicmVzb3VyY2VEb21haW4uc3RyaW5n
KCkpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNz
aW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVB
Y2Nlc3MgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIGJvb2wgaGFzTm9FbnRyeSA9IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1c7Ci0gICAgYm9vbCBpc1ByZXZhbGVudCA9ICFoYXNOb0VudHJ5ICYm
ICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci0gICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAhaGFzTm9FbnRyeSAmJiBzdGF0ZW1lbnQtPmNvbHVtbkludCgxKSA/IHRydWUgOiBmYWxzZTsK
LQotICAgIGlmICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVE
b21haW4pICYmICFpc1ByZXZhbGVudCkKLSAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFz
ZWRPbkNvb2tpZVBvbGljeTsKLQotICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpjYW5S
ZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNXaXRob3V0
UHJpb3JVc2VySW50ZXJhY3Rpb24oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSAm
JiAhaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpDYW5u
b3RSZXF1ZXN0OwotCi0gICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6T25seUlmR3JhbnRlZDsKLX0K
LQotU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFy
dHlEb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZp
cnN0UGFydHlEb21haW4pOwotICAgIGlmICghcmVzdWx0LnNlY29uZCkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
IHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsK
LSAgICAgICAgcmV0dXJuIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87Ci0gICAgfQot
Ci0gICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gKnJlc3VsdC5zZWNvbmQ7Ci0K
LSAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IENPVU5UKCopIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRv
bWFpbklEID0gPyBBTkQgdG9wTGV2ZWxEb21haW5JRCA9ID8iX3MpOwotICAgIGlmICghc3RhdGVt
ZW50Ci0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCByZXF1ZXN0aW5nRG9tYWluSUQp
ICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOwotCi0gICAgcmV0dXJuICEhc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPyBTdG9y
YWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93
bjo6Tm87Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcigpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRh
YmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJhY3Rpb24g
PSAwIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0g
ICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAg
IHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVn
aXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdHM7Ci19Ci0KLVZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIl9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dHM7Ci0gICAgCi0gICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0czsKLX0KLQotVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rp
b25Bc0ZpcnN0UGFydHkoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3Rh
dGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVE
b21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSJf
cyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybiByZXN1bHRzOwotICAgIAot
ICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICByZXN1
bHRzLmFwcGVuZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLUhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IEhhc2hNYXA8V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluPiByZXN1bHRzOwotICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1Qgc3ViRnJhbWVEb21haW4sIHJlZ2lzdHJhYmxlRG9tYWluIEZST00g
KFNFTEVDVCBvLnJlZ2lzdHJhYmxlRG9tYWluIGFzIHN1YkZyYW1lRG9tYWluLCBzLnRvcExldmVs
RG9tYWluSUQgYXMgdG9wTGV2ZWxEb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBhcyBvIElO
TkVSIEpPSU4gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIGFzIHMgV0hFUkUgby5k
b21haW5JRCA9IHMuZG9tYWluSUQpIGFzIHogSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04g
ZG9tYWluSUQgPSB6LnRvcExldmVsRG9tYWluSUQ7Il9zKTsKLSAgICBpZiAoIXN0YXRlbWVudCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdHM7Ci0KLSAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmVzdWx0cy5hZGQoUmVnaXN0cmFibGVEb21haW46OnVu
Y2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVt
blRleHQoMSkpLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJh
YmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKSkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1
dG8gZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yKCk7Ci0gICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBD
b29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOwotICAg
IGF1dG8gZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21h
aW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpOwotICAgIGF1dG8gZG9tYWluc1dp
dGhTdG9yYWdlQWNjZXNzID0gdGhpcy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7Ci0KLSAg
ICBpZiAoZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21h
aW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJ
bnRlcmFjdGlvbkFzRmlyc3RQYXJ0eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNj
ZXNzLmlzRW1wdHkoKSkgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3Ig
ZG9tYWluc1RvQmxvY2sgeyBkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFp
bnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5LCBkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MgfTsKLQotICAgIGlmIChkZWJ1Z0xv
Z2dpbmdFbmFibGVkKCkgJiYgKCFkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNF
bXB0eSgpIHx8ICFkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCi0g
ICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFj
a2luZyByZXN0cmljdGlvbnMiLCBkb21haW5zVG9CbG9jayk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VS
ZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Js
b2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxv
Y2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIHN0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkod2Vha1RoaXMtPmRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0
ZSB0cmFja2luZyByZXN0cmljdGlvbnMuIik7Ci0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5kZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBN
ZXNzYWdlTGV2ZWw6OkluZm8sICJbSVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tp
bmcgcmVzdHJpY3Rpb25zLiJfcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi1WZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkRvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpkb21haW5zKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICAKLSAgICBWZWN0b3I8RG9tYWluRGF0YT4gcmVzdWx0czsKLSAgICBhdXRvIHN0YXRl
bWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklELCByZWdp
c3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRl
cmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCwgY291bnRPZlRvcEZyYW1lUmVkaXJlY3RzIEZST00gT2JzZXJ2ZWREb21haW5zIExFRlQg
Sk9JTiAoU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCgqKSBhcyBjb3VudE9mVG9wRnJhbWVS
ZWRpcmVjdHMgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50IEdST1VQIEJZIHNvdXJjZURvbWFpbklEKSBhcyB6IE9OIHouc291cmNlRG9t
YWluSUQgPSBkb21haW5JRCJfcyk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQpCi0gICAgICAgIHJldHVy
biByZXN1bHRzOwotICAgIAotICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0
YXRlbWVudC0+Y29sdW1uSW50KDApKQotICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6
dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29s
dW1uVGV4dCgxKSkKLSAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDIpKQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg0
KSA/IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0ZW1lbnQtPmNvbHVtbkludCg1KSA/
IHRydWUgOiBmYWxzZQotICAgICAgICAgICAgLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVt
ZW50LT5jb2x1bW5JbnQoNikpCi0gICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWluSURzVG9DbGVhcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChkb21haW5JRHNU
b0NsZWFyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBsaXN0VG9DbGVh
ciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKLQotICAgIGF1dG8gY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFrZVN0
cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUg
ZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKLSAgICBpZiAoIWNsZWFyR3JhbmRm
YXRoZXJpbmdTdGF0ZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVW5leHBp
cmVkUmVjZW50VXNlckludGVyYWN0aW9uKGNvbnN0IERvbWFpbkRhdGEmIHJlc291cmNlU3RhdGlz
dGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLXsKLSAgICBp
ZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmIGhhc1N0YXRpc3RpY3NF
eHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBv
cGVyYXRpbmdEYXRlc1dpbmRvdykpIHsKLQotICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vuc2l0
aXZlIGRhdGEgaWYgd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCi0gICAgICAgIGlmIChvcGVyYXRpbmdE
YXRlc1dpbmRvdyA9PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykKLSAgICAgICAgICAgIGNs
ZWFyVXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBb
XSB7IH0pOwotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
b3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1ib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihj
b25zdCBEb21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nKQotewotICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNl
ckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykgJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3Rp
Yy5ncmFuZGZhdGhlcmVkKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiBy
ZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKQotewot
ICAgIGJvb2wgaXNSZW1vdmFsRW5hYmxlZCA9IGZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlKCkgIT0gRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6Ok5vbmUgfHwgcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKLSAgICBi
b29sIGlzUmVzb3VyY2VHcmFuZGZhdGhlcmVkID0gc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkOwotCi0gICAgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cgd2luZG93IHsgfTsKLSAgICBzd2l0Y2ggKGZpcnN0UGFydHlXZWJzaXRlRGF0YVJl
bW92YWxNb2RlKCkpIHsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzOgotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIEZpcnN0UGFy
dHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lOgotICAgICAgICB3aW5kb3cgPSBPcGVyYXRp
bmdEYXRlc1dpbmRvdzo6U2hvcnQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0
eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU6OkFsbEJ1dENvb2tpZXNMaXZlT25UZXN0aW5nVGltZW91
dDoKLSAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rp
bmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3Zh
bE1vZGU6OkFsbEJ1dENvb2tpZXNSZXByb1Rlc3RpbmdUaW1lb3V0OgotICAgICAgICB3aW5kb3cg
PSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6Rm9yUmVwcm9UZXN0aW5nOwotICAgIH0KLQotICAgIHJl
dHVybiBpc1JlbW92YWxFbmFibGVkICYmICFpc1Jlc291cmNlR3JhbmRmYXRoZXJlZCAmJiAhaGFz
SGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKHJlc291cmNlU3RhdGlzdGljLCB3aW5k
b3cpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzaG91
bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IoRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKLXsKLSAgICBpZiAoKCFpc1NhbWVT
aXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkKCkgJiYgIXNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0
cmljdEZvclNwZWNpZmljRG9tYWluKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWlu
KSkKLSAgICAgICAgfHwgKHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VT
dGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChyZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0
ZVN0cmljdEVuZm9yY2VtZW50ID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BGcmFtZVJlZGlyZWN0
c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKLSAgICAgICAgY2xlYXJUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KHJlc291cmNlU3Rh
dGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluLCBbXSB7IH0pOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0aWMpCi17Ci0gICAgaWYgKHN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZh
bHVlKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIHJldHVybiBz
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWU7Ci19Ci0KLVJlZ2lzdHJhYmxl
RG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RX
ZWJzaXRlRGF0YUZvcigpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAg
ICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKCkgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdyYW5k
ZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpOwotCi0gICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcp
Ci0gICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwotCi0gICAgYXV0
byBub3cgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgYXV0byBvbGRlc3RVc2VySW50ZXJhY3Rpb24g
PSBub3c7Ci0gICAgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURh
dGFGb3IgdG9EZWxldGVPclJlc3RyaWN0Rm9yOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBWZWN0b3I8RG9tYWluRGF0
YT4gZG9tYWlucyA9IHRoaXMtPmRvbWFpbnMoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFp
bklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKLSAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IGRv
bWFpbnMpIHsKLSAgICAgICAgaWYgKHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9u
KHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSB0aGlzLT5tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZShzdGF0aXN0aWMpKQotICAgICAgICAgICAgb2xkZXN0
VXNlckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0VXNlckludGVyYWN0aW9uLCAqbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsV2Vi
c2l0ZURhdGFGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgewot
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbENvb2tp
ZXNGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgICAgICB0
b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVsZXRlQWxsTm9uQ29va2llV2Vic2l0ZURh
dGFGb3IuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihzdGF0aXN0
aWMsIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgdG9E
ZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRh
Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICAgICAgICAg
IHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZykpIHsKLSAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9t
YWluc1RvRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0Vu
YWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1
ZywgIlNjaGVkdWxlZCAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHRvIGhhdmUgaXRzIGNvb2tpZXMg
c2V0IHRvIFNhbWVTaXRlPXN0cmljdC4iLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4uc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5m
bywgbWFrZVN0cmluZygiU2NoZWR1bGVkICciLCBzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4u
c3RyaW5nKCksICInIHRvIGhhdmUgaXRzIGNvb2tpZXMgc2V0IHRvIFNhbWVTaXRlPXN0cmljdCcu
IikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkKLSAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZy5hcHBlbmQoc3Rh
dGlzdGljLmRvbWFpbklEKTsKLSAgICB9Ci0KLSAgICAvLyBHaXZlIHRoZSB1c2VyIGVub3VnaCB0
aW1lIHRvIGludGVyYWN0IHdpdGggd2Vic2l0ZXMgdW50aWwgd2UgcmVtb3ZlIG5vbi1jb29raWUg
d2Vic2l0ZSBkYXRhLgotICAgIGlmICghcGFyYW1ldGVycygpLmlzUnVubmluZ1Rlc3QgJiYgbm93
IC0gb2xkZXN0VXNlckludGVyYWN0aW9uIDwgcGFyYW1ldGVycygpLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCkKLSAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFp
bnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmNsZWFyKCk7Ci0KLSAgICBjbGVh
ckdyYW5kZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7
Ci0gICAgCi0gICAgcmV0dXJuIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgdW5zaWduZWQgY291
bnQgPSAwOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50
KG1fb2JzZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCwgb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5
LCAicHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQiX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgp
ID09IFNRTElURV9ST1cpCi0gICAgICAgIGNvdW50ID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5J
bnQoMCk7Ci0KLSAgICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRy
aWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50
cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOwotCi0gICAg
c2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJp
ZXNEb3duVG87Ci0gICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOwotCi0gICAgYXV0byByZWNv
cmRzVG9QcnVuZSA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2
YWxlbnQsIGxhc3RTZWVuIExJTUlUID8iX3MpOwotICAgIGlmICghcmVjb3Jkc1RvUHJ1bmUgfHwg
cmVjb3Jkc1RvUHJ1bmUtPmJpbmRJbnQoMSwgY291bnRMZWZ0VG9QcnVuZSkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKLSAg
ICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQotICAgICAgICBl
bnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7Ci0KLSAg
ICBhdXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKLQotICAgIGF1
dG8gcHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3Ry
aW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxp
c3RUb1BydW5lLCAiKSIpKTsKLSAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LCB1cGRhdGVM
YXN0U2VlblF1ZXJ5LCAidXBkYXRlTGFzdFNlZW4iX3MpOwotICAgIGlmICghc2NvcGVkU3RhdGVt
ZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vlbi5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldExhc3RTZWVuIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5z
ZXJ0IGF0dGVtcHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICB1
cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNl
Y29uZHMoKSkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAo
ZG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0g
YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZh
bGVudFJlc291cmNlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVt
cHQiLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFByZXZhbGVudFJl
c291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3VsZFNraXAoZG9tYWluKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGludCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCwgdXBk
YXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnksICJ1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQiX3Mp
OwotICAgIGlmICghc2NvcGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JF
TEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6dXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBz
dWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQotewot
ICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7Ci0gICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChj
b3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKLSAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOwotICAgIAotICAgIGlmICghc3ViRnJhbWVV
bmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50IHx8ICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvdW50U3ViU3RhdGlzdGljc1Rlc3RpbmcgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmIChzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+Ymlu
ZEludCgxLCBkb21haW5JRChzdWJmcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDIsIGRvbWFpbklE
KHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21h
aW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVDb3VudC0+YmluZEludCgyLCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPmJp
bmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElURV9PSwot
ICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5iaW5kSW50KDIsIGRvbWFp
bklEKHRvcEZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y291bnRTdWJTdGF0aXN0aWNzVGVzdGluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHN1YkZyYW1lVW5kZXJUb3BGcmFt
ZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVwotICAgICAgICB8fCBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVDb3VudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUby0+c3RlcCgpICE9IFNRTElURV9ST1cpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gKHN1YkZyYW1lVW5kZXJUb3BGcmFtZUNvdW50LT5j
b2x1bW5JbnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudC0+Y29sdW1u
SW50KDApID09IDEgJiYgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+Y29sdW1uSW50KDAp
ID09IDEpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRCb29sZWFuKFN0cmluZ0J1aWxkZXImIGJ1
aWxkZXIsIGNvbnN0IFN0cmluZyYgbGFiZWwsIGJvb2wgZmxhZykKLXsKLSAgICBidWlsZGVyLmFw
cGVuZCgiICAgICIsIGxhYmVsLCAiOiAiLCBmbGFnID8gIlllcyIgOiAiTm8iKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kTmV4dEVudHJ5KFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0
cmluZyYgZW50cnkpCi17Ci0gICAgYnVpbGRlci5hcHBlbmQoIiAgICAgICAgIiwgZW50cnksICdc
bicpOwotfQotCi1TdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omdl
dERvbWFpblN0cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IGVtcHR5U3RyaW5nKCk7Ci0gICAgCi0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURT
dGF0ZW1lbnQsIGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEIl9zKTsKLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQuIFN0
YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAg
ICAgIHJlc3VsdCA9IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50LT5jb2x1bW5U
ZXh0KDApOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUFTQ0lJTGl0ZXJhbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z2V0U3ViU3RhdGlzdGljU3RhdGVtZW50
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKSBjb25zdAotewotICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyIpCi0gICAgICAgIHJldHVybiAiU0VM
RUNUIHRvcExldmVsRG9tYWluSUQgZnJvbSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgZG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8iKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b0RvbWFpbklEIGZy
b20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIikKLSAg
ICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyJfczsKLSAgICBpZiAodGFibGVOYW1l
ID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQotICAgICAgICByZXR1cm4gIlNFTEVD
VCBmcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9E
b21haW5JRCA9ID8iX3M7Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVMb2FkZWRUaGly
ZFBhcnR5U2NyaXB0cyIpCi0gICAgICAgIHJldHVybiAiU0VMRUNUIHN1YnJlc291cmNlRG9tYWlu
SUQgZnJvbSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9t
YWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJsZU5hbWUgPT0gIlN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMiKQotICAgICAgICByZXR1cm4gIlNFTEVDVCB0b3BGcmFtZURvbWFpbklEIGZyb20g
U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyJf
czsKLSAgICBpZiAodGFibGVOYW1lID09ICJTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IikKLSAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wRnJhbWVEb21haW5JRCBmcm9tIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8iX3M7
Ci0gICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIpCi0g
ICAgICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/Il9zOwotICAgIGlmICh0YWJs
ZU5hbWUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIpCi0gICAgICAgIHJldHVy
biAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKLSAgICAKLSAgICByZXR1cm4gIiJf
czsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5k
U3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0Ci17Ci0gICAgYXV0byBxdWVyeSA9
IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5hbWUpOwotICAgIAotICAgIGlmICghcXVl
cnkubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvIGRhdGEgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwotICAgIAotICAgIGlmICghZGF0YSB8fCBk
YXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgSVRQ
X1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdC4gU3RhdGVtZW50IGZhaWxl
ZCB0byBwcmVwYXJlIG9yIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChkYXRhLT5z
dGVwKCkgIT0gU1FMSVRFX1JPVykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJ1aWxkZXIu
YXBwZW5kKCIgICAgIiwgdGFibGVOYW1lLCAiOlxuIik7Ci0gICAgCi0gICAgYXV0byByZXN1bHQg
PSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoZGF0YS0+Y29sdW1uSW50KDApKTsKLSAgICBh
cHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKLSAgICAKLSAgICB3aGlsZSAoZGF0YS0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5n
RnJvbURvbWFpbklEKGRhdGEtPmNvbHVtbkludCgwKSk7Ci0gICAgICAgIGFwcGVuZE5leHRFbnRy
eShidWlsZGVyLCByZXN1bHQpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgaGFzSGFkUmVjZW50
VXNlckludGVyYWN0aW9uKFdURjo6U2Vjb25kcyBpbnRlcmFjdGlvblRpbWVTZWNvbmRzKQotewot
ICAgIHJldHVybiBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAy
NF9oOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNv
dXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGNvbnN0IFN0cmluZyYgZG9tYWlu
KSBjb25zdAotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LCBnZXRSZXNvdXJjZURh
dGFCeURvbWFpbk5hbWVRdWVyeSwgInJlc291cmNlVG9TdHJpbmciX3MpOwotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9t
YWluKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXNvdXJjZVRvU3Ry
aW5nLiBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQgb3IgZG9tYWluIHdhcyBub3QgZm91bmQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYnVpbGRlci5hcHBlbmQoIlJlZ2lzdHJhYmxlIGRvbWFpbjogIiwg
ZG9tYWluLCAnXG4nKTsKLSAgICAKLSAgICAvLyBVc2VyIGludGVyYWN0aW9uCi0gICAgYXBwZW5k
Qm9vbGVhbihidWlsZGVyLCAiaGFkVXNlckludGVyYWN0aW9uIiwgbV9nZXRSZXNvdXJjZURhdGFC
eURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCkp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvbjogIik7Ci0gICAgaWYgKGhhc0hhZFJlY2VudFVzZXJJbnRl
cmFjdGlvbihTZWNvbmRzKG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCkpKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIndpdGhpbiAyNCBob3VycyIpOwotICAgIGVsc2UKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIi0xIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYXBw
ZW5kQm9vbGVhbihidWlsZGVyLCAiZ3JhbmRmYXRoZXJlZCIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlE
b21haW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoR3JhbmRmYXRoZXJlZEluZGV4KSk7Ci0gICAg
YnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0KLSAgICAvLyBTdG9yYWdlIGFjY2VzcwotICAgIGFwcGVu
ZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyIsIGRvbWFpbik7Ci0KLSAgICAvLyBUb3AgZnJhbWUgc3RhdHMKLSAgICBhcHBlbmRTdWJT
dGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIiwgZG9tYWlu
KTsKLSAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IiwgZG9tYWluKTsKLSAgICBh
cHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSIsIGRvbWFpbik7Ci0gICAgYXBwZW5kU3ViU3RhdGlzdGlj
TGlzdChidWlsZGVyLCAiVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyIsIGRvbWFpbik7
Ci0KLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tp
ZURhdGFSZW1vdmFsIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNv
bHVtbkludChJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLQotICAgIC8vIFN1YmZyYW1lIHN0YXRzCi0gICAgYXBw
ZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyIsIGRvbWFpbik7Ci0KLSAgICAvLyBTdWJyZXNvdXJjZSBzdGF0cwotICAgIGFwcGVuZFN1YlN0
YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiLCBk
b21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8iLCBkb21haW4pOwotICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qo
YnVpbGRlciwgIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7Ci0KLSAg
ICAvLyBQcmV2YWxlbnQgUmVzb3VyY2UKLSAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1By
ZXZhbGVudFJlc291cmNlIiwgbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQt
PmNvbHVtbkludChJc1ByZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgYXBwZW5kQm9vbGVhbihidWlsZGVyLCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiLCBt
X2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgYnVpbGRlci5h
cHBlbmQoIiAgICBkYXRhUmVjb3Jkc1JlbW92ZWQ6ICIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21h
aW5OYW1lU3RhdGVtZW50LT5jb2x1bW5JbnQoRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURFeGlzdHNJbkRhdGFiYXNlKGludCBkb21haW5JRCkKLXsK
LSAgICBhdXRvIHNjb3BlZExpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQsIGxpbmtEZWNvcmF0
aW9uRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UiX3MpOwotICAgIGF1dG8g
c2NvcGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudCht
X3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQsIHNjcmlwdExvYWRFeGlzdHNRdWVyeSwgImRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZSBsaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudCJfcyk7Ci0g
ICAgYXV0byBzY29wZWRTdWJGcmFtZUV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRl
bWVudChtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LCBzdWJGcmFtZUV4aXN0c1F1ZXJ5LCAiZG9t
YWluSURFeGlzdHNJbkRhdGFiYXNlIHN1YkZyYW1lRXhpc3RzU3RhdGVtZW50Il9zKTsKLSAgICBh
dXRvIHNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQsIHN1YlJlc291cmNlRXhpc3RzUXVlcnks
ICJkb21haW5JREV4aXN0c0luRGF0YWJhc2Ugc3ViUmVzb3VyY2VFeGlzdHNTdGF0ZW1lbnQiX3Mp
OwotICAgIGF1dG8gc2NvcGVkVW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCwgdW5pcXVlUmVk
aXJlY3RFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSB1bmlxdWVSZWRpcmVj
dEV4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgYXV0byBzY29wZWRPYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbnNFeGlz
dHNTdGF0ZW1lbnQsIG9ic2VydmVkRG9tYWluc0V4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJ
bkRhdGFiYXNlIG9ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudCJfcyk7Ci0gICAgCi0gICAg
aWYgKCFzY29wZWRMaW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2Nv
cGVkU2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudAotICAgICAgICB8fCAhc2NvcGVkU3ViRnJhbWVF
eGlzdHNTdGF0ZW1lbnQKLSAgICAgICAgfHwgIXNjb3BlZFN1YlJlc291cmNlRXhpc3RzU3RhdGVt
ZW50Ci0gICAgICAgIHx8ICFzY29wZWRVbmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudAotICAg
ICAgICB8fCAhc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50Ci0gICAgICAgIHx8
IG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9
IFNRTElURV9PSwotICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3RhdGVtZW50LT5i
aW5kSW50KDIsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zY3JpcHRMb2Fk
RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgbV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0YXRlbWVudC0+YmluZElu
dCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fc3ViRnJhbWVFeGlzdHNT
dGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBt
X3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudC0+YmluZEludCgy
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IG1fdW5pcXVlUmVkaXJlY3RFeGlz
dHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgfHwgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFT
RV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQt
PnN0ZXAoKSAhPSBTUUxJVEVfUk9XCi0gICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4
aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwgbV91bmlxdWVS
ZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKLSAgICAgICAgfHwg
bV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBm
YWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc2NyaXB0TG9hZEV4aXN0
c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkg
fHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fb2Jz
ZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFy
YW1ldGVycygpCi17Ci0gICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOwotICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKLSAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKLQotICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewotICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMgY291bnRP
cGVyYXRpbmdEYXRlc1N0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX29wZXJhdGluZ0RhdGVzU2l6ZSA9IGNvdW50T3BlcmF0aW5nRGF0ZXNTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKLQotICAgIGlmICghZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQgfHwgZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0Rh
dGVzUGFyYW1ldGVycyBnZXRGaXJzdE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0
ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG1fbW9zdFJlY2VudE9wZXJhdGluZ0RhdGUgPSBPcGVyYXRp
bmdEYXRlKGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMCks
IGdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE1v
c3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOwotCi0gICAgaWYg
KCFnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50KSB7Ci0gICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50IGZhaWxlZCBkdXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGgg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJh
dGluZ0RhdGVzV2luZG93U2hvcnQgLSAxKQotICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5n
RGF0ZSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGdldE9wZXJhdGlu
Z0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9y
dCAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRv
d1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdE
YXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQoKSBv
ciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0T3Bl
cmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDApLCBnZXRPcGVyYXRpbmdEYXRl
V2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMSksIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0
ZW1lbnQtPmNvbHVtbkludCgyKSk7Ci0gICAgfQotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXNT
aXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyAtIDEpCi0gICAgICAgIG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGUgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGdldE9w
ZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnJlc2V0KCk7Ci0gICAgICAgIGlmIChnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5iaW5kSW50KDEsIG9wZXJhdGluZ0RhdGVzV2luZG93
TG9uZyAtIDEpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdp
bmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnVwZGF0ZU9wZXJhdGluZ0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRp
bmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCB3aXRoIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORyAiLiBUaGUgZXJyb3IgY291bGQgYmUgaW4gdGhlIGNhbGxzIHRvIGJpbmQo
KSBvciBzdGVwKCkuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gT3BlcmF0aW5nRGF0ZShnZXRP
cGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMCksIGdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0
YXRlbWVudC0+Y29sdW1uSW50KDIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBhdXRv
IHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAobV9vcGVyYXRpbmdEYXRl
c1NpemUgPiAwKSB7Ci0gICAgICAgIGlmICh0b2RheSA8PSBtX21vc3RSZWNlbnRPcGVyYXRpbmdE
YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwotCi0gICAgaW50IHJvd3NUb1By
dW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgKyAx
OwotICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKLSAgICAgICAgYXV0byBkZWxldGVMZWFzdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQo
IkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZIHllYXIsIG1vbnRoLCBtb250aERh
eSBMSU1JVCA/OyJfcyk7Ci0gICAgICAgIGlmICghZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgICAgICB8fCBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0Rh
dGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUpICE9IFNRTElURV9PSwotICAgICAg
ICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY2x1
ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGRlbGV0ZUxlYXN0UmVjZW50T3BlcmF0
aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGF1
dG8gaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudCgiSU5TRVJUIE9SIElHTk9SRSBJTlRPIE9wZXJhdGluZ0RhdGVzICh5ZWFyLCBtb250aCwg
bW9udGhEYXkpIFNFTEVDVCA/LCA/LCA/OyJfcyk7Ci0gICAgaWYgKCFpbnNlcnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50Ci0gICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgdG9kYXkueWVhcigpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgyLCB0b2RheS5tb250aCgpKSAhPSBTUUxJVEVf
T0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+YmluZEludCgzLCB0
b2RheS5tb250aERheSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5n
RGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5IGluc2Vy
dE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUi
IFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycygpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBzd2l0Y2gg
KG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6
TG9uZzoKLSAgICAgICAgaWYgKG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5n
RGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX2xv
bmdXaW5kb3dPcGVyYXRpbmdEYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0OgotICAgICAgICBp
ZiAobV9zaG9ydFdpbmRvd09wZXJhdGluZ0RhdGUgJiYgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxU
aW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8ICptX3Nob3J0V2luZG93T3BlcmF0
aW5nRGF0ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOgotICAgICAgICByZXR1
cm4gV2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBvcGVy
YXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZzsKLSAgICBjYXNlIE9wZXJhdGluZ0RhdGVz
V2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQg
c3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rp
b24gKG1haW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCi17Ci0gICAgLy8gUG9wdWxhdGUgdGhl
IE9wZXJhdGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmlu
Zy4KLSAgICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7Ci0KLSAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPD0gbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKLSAg
ICAgICAgZG91YmxlIGRheXNUb1N1YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSku
dmFsdWUoKTsKLSAgICAgICAgZGF5c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgLSBkYXlzVG9TdWJ0cmFjdDsKLSAgICAgICAgYXV0byBk
YXRlVG9JbnNlcnQgPSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21S
YXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpKTsKLQotICAgICAgICBhdXRvIGluc2VydE9wZXJh
dGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBP
UiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxF
Q1QgPywgPywgPzsiX3MpOwotICAgICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZGF0ZVRvSW5zZXJ0LnllYXIoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBpbnNl
cnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgp
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1l
bnQtPmJpbmRJbnQoMywgZGF0ZVRvSW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRFeHBpcmVk
U3RhdGlzdGljRm9yVGVzdGluZyBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IGZhaWxlZCB0
byBzdGVwLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudC0+cmVzZXQo
KTsKLSAgICB9Ci0KLSAgICB1cGRhdGVPcGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVhc3Qg
cmVjZW50IG9mIGFsbCBlbnRyaWVzLgotICAgIGRheXNBZ29JblNlY29uZHMgLT0gU2Vjb25kczo6
ZnJvbUhvdXJzKDI0KS52YWx1ZSgpOwotICAgIGF1dG8gc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21h
aW5TdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudCwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSwgImluc2VydEV4cGlyZWRTdGF0
aXN0aWNGb3JUZXN0aW5nIl9zKTsKLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRUZXh0KFJlZ2lzdHJhYmxlRG9tYWluSW5kZXgsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kRG91YmxlKExhc3RTZWVuSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZEludChIYWRVc2VySW50ZXJhY3Rpb25JbmRleCwgaGFzVXNlckludGVyYWN0aW9uKSAhPSBT
UUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVJbmRleCwgZGF5c0Fnb0lu
U2Vjb25kcykgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LT5iaW5kSW50KEdyYW5kZmF0aGVyZWRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChJc1ByZXZhbGVudEluZGV4LCBpc1ByZXZhbGVudCkgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KElzVmVyeVBy
ZXZhbGVudEluZGV4LCBmYWxzZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZEluc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCAwKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVy
YWN0aW9uSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJSW5kZXgsIDApICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29w
ZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChJc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsSW5kZXgsIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0
YVJlbW92YWwpICE9IFNRTElURV9PSykgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0
YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLVBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCogc3RhdGVtZW50LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byBzb3VyY2VTaXRlRG9tYWluID0gZ2V0
RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDApKTsKLSAgICBh
dXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChz
dGF0ZW1lbnQtPmNvbHVtbkludCgxKSk7Ci0gICAgYXV0byBzb3VyY2VJRCA9IHN0YXRlbWVudC0+
Y29sdW1uSW50KDIpOwotICAgIGF1dG8gdGltZU9mQWRDbGljayA9IGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0
YXRlbWVudC0+Y29sdW1uRG91YmxlKDUpIDogc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMyk7Ci0g
ICAgYXV0byB0b2tlbiA9IGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg3KSA6
IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg0KTsKLSAgICBhdXRvIHNpZ25hdHVyZSA9IGF0dHJpYnV0
aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmli
dXRlZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg4KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg1
KTsKLSAgICBhdXRvIGtleUlEID0gYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1
cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkID8gc3RhdGVtZW50LT5jb2x1bW5UZXh0
KDkpIDogc3RhdGVtZW50LT5jb2x1bW5UZXh0KDYpOwotCi0gICAgUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgYXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZUlEKHNvdXJjZUlEKSwgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzb3VyY2VTaXRlRG9tYWluKSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVt
ZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZShSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVj
a2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKGRlc3RpbmF0aW9uU2l0ZURvbWFp
bikpLCB7IH0sIHsgfSwgV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHRpbWVPZkFkQ2xpY2spKTsK
LSAgICAKLSAgICBpZiAoYXR0cmlidXRpb25UeXBlID09IFByaXZhdGVDbGlja01lYXN1cmVtZW50
QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIGF1dG8gYXR0cmlidXRpb25U
cmlnZ2VyRGF0YSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpOwotICAgICAgICBhdXRvIHByaW9y
aXR5ID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoNCk7Ci0gICAgICAgIGF1dG8gc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPSBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg2KTsKLSAgICAgICAg
YXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMTApOwotCi0gICAgICAgIGlmIChhdHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0x
KQotICAgICAgICAgICAgYXR0cmlidXRpb24uc2V0QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgeyBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oYXR0cmlidXRpb25UcmlnZ2VyRGF0YSksIFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpQcmlvcml0eShwcmlvcml0eSkgfSk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25h
bDxXYWxsVGltZT4gc291cmNlRWFybGllc3RUaW1lVG9TZW5kOwotICAgICAgICBzdGQ6Om9wdGlv
bmFsPFdhbGxUaW1lPiBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZDsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBvcnQgaGFzIGJl
ZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgICAgICBpZiAoc291cmNlRWFybGll
c3RUaW1lVG9TZW5kVmFsdWUgPiAwLjApCi0gICAgICAgICAgICBzb3VyY2VFYXJsaWVzdFRpbWVU
b1NlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc291cmNlRWFybGllc3RUaW1lVG9TZW5k
VmFsdWUpOwotCi0gICAgICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZFZhbHVl
ID4gMC4wKQotICAgICAgICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSk7
Ci0KLSAgICAgICAgYXR0cmlidXRpb24uc2V0VGltZXNUb1NlbmQoeyBzb3VyY2VFYXJsaWVzdFRp
bWVUb1NlbmQsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kIH0pOwotICAgIH0KLQotICAg
IGF0dHJpYnV0aW9uLnNldFNvdXJjZVNlY3JldFRva2VuKHsgdG9rZW4sIHNpZ25hdHVyZSwga2V5
SUQgfSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRpb247Ci19Ci0KLXN0ZDo6cGFpcjxzdGQ6Om9w
dGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Piwgc3RkOjpvcHRpb25h
bDxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50KGNvbnN0IFdlYkNv
cmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlJiBzb3VyY2VTaXRlLCBjb25z
dCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlv
blNpdGUmIGRlc3RpbmF0aW9uU2l0ZSkKLXsKLSAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9
IGRvbWFpbklEKHNvdXJjZVNpdGUucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1dG8gZGVzdGlu
YXRpb25TaXRlRG9tYWluSUQgPSBkb21haW5JRChkZXN0aW5hdGlvblNpdGUucmVnaXN0cmFibGVE
b21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxsb3B0LCBz
dGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCwgZmlu
ZFVuYXR0cmlidXRlZFF1ZXJ5LCAiZmluZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zKTsKLSAg
ICBpZiAoIWZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZFVu
YXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlU2l0ZURvbWFpbklE
KSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSykgewot
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQg
ZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0ZW1lbnQsIGZp
bmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotICAg
IGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKLSAgICAgICAgfHwgZmluZEF0dHJp
YnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAg
IElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBmaW5kQXR0
cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBzdGQ6Om9wdGlvbmFsPFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50PiB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDsKLSAgICBpZiAo
ZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0g
ICAgICAgIHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6VW5hdHRy
aWJ1dGVkKTsKLQotICAgIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50PiBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci0gICAgaWYgKGZpbmRB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKLSAgICAgICAg
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gYnVpbGRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEZyb21EYXRhYmFzZShmaW5kQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC5nZXQoKSwg
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwotCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50LCBhdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQpOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmIGF0dHJpYnV0aW9uLCBQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSBhdHRyaWJ1dGlvblR5cGUpCi17Ci0gICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7Ci0KLSAgICBh
dXRvIHNvdXJjZURhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihhdHRyaWJ1dGlvbi5zb3VyY2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOwotICAgIGF1
dG8gYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3Ry
YWJsZURvbWFpbik7Ci0KLSAgICBpZiAoIXNvdXJjZURhdGEuc2Vjb25kIHx8ICFhdHRyaWJ1dGlv
bkRlc3RpbmF0aW9uRGF0YS5zZWNvbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIHNv
dXJjZVVubGlua2FibGVUb2tlbiA9IGF0dHJpYnV0aW9uLnNvdXJjZVVubGlua2FibGVUb2tlbigp
OwotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAgICAgYXV0byBhdHRyaWJ1dGlvblRyaWdn
ZXJEYXRhID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0cmlidXRp
b24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkuZGF0YSA6IC0xOwotICAgICAgICBh
dXRvIHByaW9yaXR5ID0gYXR0cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpID8gYXR0
cmlidXRpb24uYXR0cmlidXRpb25UcmlnZ2VyRGF0YSgpLnZhbHVlKCkucHJpb3JpdHkgOiAtMTsK
LSAgICAgICAgYXV0byBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgPSBhdHRyaWJ1dGlvbi50aW1l
c1RvU2VuZCgpLnNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA/IGF0dHJpYnV0aW9uLnRpbWVzVG9T
ZW5kKCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kLnZhbHVlKCkuc2Vjb25kc1NpbmNlRXBvY2go
KS52YWx1ZSgpIDogLTE7Ci0gICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmQgPSBhdHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5kZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZC52YWx1ZSgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSA6IC0xOwotCi0gICAgICAg
IC8vIFdlIHNob3VsZCBuZXZlciBiZSBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBwcml2YXRlIGNs
aWNrIG1lYXN1cmVtZW50IHZhbHVlIGludG8gdGhlIGRhdGFiYXNlIHdpdGhvdXQgdmFsaWQgcmVw
b3J0IHRpbWVzLgotICAgICAgICBBU1NFUlQoc291cmNlRWFybGllc3RUaW1lVG9TZW5kICE9IC0x
ICYmIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kICE9IC0xKTsKLQotICAgICAgICBhdXRv
IHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudChpbnNlcnRBdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgICAgIGlmICghc3RhdGVtZW50Ci0g
ICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZURhdGEuc2Vjb25kKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmli
dXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHN0YXRlbWVudC0+YmluZEludCgzLCBhdHRyaWJ1dGlvbi5zb3VyY2VJRCgpLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCg0LCBhdHRyaWJ1dGlvblRy
aWdnZXJEYXRhKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZElu
dCg1LCBwcmlvcml0eSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmREb3VibGUoNiwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2No
KCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRE
b3VibGUoNywgc291cmNlRWFybGllc3RUaW1lVG9TZW5kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoOCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291
cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNR
TElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kVGV4dCg5LCBzb3VyY2VVbmxp
bmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPnNpZ25hdHVyZUJhc2U2NFVSTCA6
IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kVGV4dCgxMCwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3RhdGVtZW50LT5iaW5kRG91YmxlKDExLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRv
U2VuZCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewotICAgICAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lv
bklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50UXVlcnksIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9k
YXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSk7Ci0gICAgaWYgKCFzdGF0ZW1lbnQKLSAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kSW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCi0g
ICAgICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRh
dGEuc2Vjb25kKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMs
IGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0
ZW1lbnQtPmJpbmREb3VibGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNT
aW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+
YmluZFRleHQoNSwgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2Vu
LT50b2tlbkJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVu
bGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FM
SVRFX09LCi0gICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJs
ZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3Ry
aW5nKCkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudCBpbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1
ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBbGxV
bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKQot
ewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fc2V0
VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1lbnQsIHNl
dFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkUXVlcnksICJtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
Il9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50IHx8IHNjb3BlZFN0YXRlbWVudC0+c3Rl
cCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nl
c3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
bGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFzRXhwaXJlZEZvclRlc3Rpbmcs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlVW5hdHRy
aWJ1dGVkKFByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1dGlvbikKLXsKLSAgICBhdXRv
IHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5y
ZWdpc3RyYWJsZURvbWFpbik7Ci0gICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRv
bWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsK
LQotICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0aW5hdGlvblNpdGVEb21haW5J
RCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50LCByZW1vdmVV
bmF0dHJpYnV0ZWRRdWVyeSwgInJlbW92ZVVuYXR0cmlidXRlZCJfcyk7Ci0KLSAgICBpZiAoIXNj
b3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNv
dXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVVbmF0dHJpYnV0ZWQsIGVycm9yIG1lc3NhZ2U6
ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotc3RkOjpvcHRpb25h
bDxQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVD
bGlja01lYXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJp
YnV0aW9uRGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dl
ckRhdGEmJiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQotewotICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgY2xlYXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxp
bmcgYW4gYXR0cmlidXRpb24uCi0gICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQoKTsKLQotICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBh
dHRyaWJ1dGlvbi4iKTsKLSAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsICJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRp
b24uIl9zKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LQotICAgIGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKLSAgICBhdXRv
IHByaW9yaXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKLQotICAgIGlmIChV
TkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8o
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIs
IGRhdGEsIHByaW9yaXR5KTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZv
LCBtYWtlU3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0
aW9uIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJp
b3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKLSAgICB9Ci0KLSAgICBQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50
aWxTZW5kIHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIGF1dG8gYXR0cmli
dXRpb24gPSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRp
b25TaXRlKTsKLSAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24u
Zmlyc3Q7Ci0gICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNv
bmQ7Ci0KLSAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgewotICAgICAgICAvLyBBbHdh
eXMgY29udmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhl
IHVuYXR0cmlidXRlZCBtYXAuCi0gICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNs
eVVuYXR0cmlidXRlZCk7Ci0gICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5h
dHRyaWJ1dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1v
dmUoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSkpOwotCi0gICAgICAgIC8vIFdlIHNob3VsZCBhbHdh
eXMgaGF2ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVu
YXR0cmlidXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1
dGlvbiB3aXRoIGEgaGlnaGVyIHByaW9yaXR5LgotICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNl
bmQuaGFzVmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVy
dGVkIGEgc3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7Ci0gICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBh
dHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJf
cywgcHJpb3JpdHksICInLiJfcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUg
aXMgbm8gcHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhp
Z2hlciBwcmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCi0gICAgICAgIGlmICgh
cHJldmlvdXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhh
c0hpZ2hlclByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7Ci0gICAgICAgICAg
ICBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRy
aWJ1dGVkKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0
ZWQpOwotCi0gICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgewot
ICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQs
ICJSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25l
IHdpdGggYXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGlj
fXUgYmVjYXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKLSAg
ICAgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmco
IltQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVy
dGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNl
IGl0IGhhZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7Ci0gICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVz
cGVjdCB0aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKLSAgICAg
ICAgLy8gbm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0
LgotICAgICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNs
eUJlZW5SZXBvcnRlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBw
cmV2aW91c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRv
U2VuZChXVEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKLSAgICAgICAgICAgIGlmICgh
c2Vjb25kc1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotCi0gICAgICAgICAgICBpbnNlcnRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKLQotICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVk
IGFuIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRh
OiAle3B1YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdo
ZXIgcHJpb3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOwotICAgICAgICAgICAgICAgIGRlYnVnQnJv
YWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3Vy
ZW1lbnRdIFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBw
cmlvcml0eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5o
YXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLQotICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOwotfQotCi1WZWN0b3I8V2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjphbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKQotewotICAgIGF1
dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2Fs
bEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRv
U3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5n
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGF0dHJpYnV0aW9uczsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCi0gICAgICAgIGF0dHJpYnV0aW9ucy5hcHBlbmQo
YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZyb21EYXRhYmFzZShhdHRyaWJ1dGVkU2NvcGVk
U3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6
QXR0cmlidXRlZCkpOwotCi0gICAgcmV0dXJuIGF0dHJpYnV0aW9uczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW4pCi17Ci0gICAgLy8g
RGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBpZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgot
ICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUiOwotICAgIGlmIChkb21haW4pIHsKLSAgICAg
ICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21haW5JRCgqZG9tYWluKTsKLSAgICAgICAgaWYg
KCFkb21haW5JRFRvTWF0Y2gpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYmluZFBh
cmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21haW5JRFRvTWF0Y2gpOwotICAgIH0KLQotICAg
IGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOwot
Ci0gICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3Bl
ZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0
ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNs
ZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwotCi0gICAgaWYgKCFjbGVhclVuYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFtZXRlcikgIT0gU1FMSVRFX09LCi0gICAgICAg
IHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFy
YW1ldGVyKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyVW5hdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICB9Ci0KLSAgICBhdXRvIGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50U3RhdGVtZW50LCBjbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFF1ZXJ5
LCAiY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRT
dGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGJpbmRQYXJhbWV0ZXIpICE9IFNRTElURV9PSwotICAgICAg
ICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGJpbmRQYXJh
bWV0ZXIpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjbGVhclByaXZhdGVDbGlja01lYXN1cmVtZW50IGNsZWFyQXR0cmlidXRlZFNjb3BlZFN0
YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
ckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCi17Ci0gICAgYXV0byBleHBpcmF0aW9u
VGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQ6Om1heEFnZSgpOwotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQs
IGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGlyZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAot
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRpbWVG
cmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSwotICAgICAgICB8
fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgZXJy
b3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1T
dHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmF0dHJpYnV0aW9uVG9T
dHJpbmcoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQsIFByaXZhdGVDbGlja01l
YXN1cmVtZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKLXsKLSAgICBhdXRvIHNv
dXJjZVNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5j
b2x1bW5JbnQoMCkpOwotICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9tYWluID0gZ2V0RG9tYWlu
U3RyaW5nRnJvbURvbWFpbklEKHN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKLSAgICBhdXRvIHNv
dXJjZUlEID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMik7Ci0KLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlNvdXJjZSBzaXRlOiAiLCBzb3VyY2VTaXRlRG9t
YWluLCAiXG5BdHRyaWJ1dGUgb24gc2l0ZTogIiwgZGVzdGluYXRpb25TaXRlRG9tYWluLCAiXG5T
b3VyY2UgSUQ6ICIsIHNvdXJjZUlEKTsKLQotICAgIGlmIChhdHRyaWJ1dGlvblR5cGUgPT0gUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpIHsKLSAgICAg
ICAgYXV0byBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gc3RhdGVtZW50LT5jb2x1bW5JbnQoMyk7
Ci0gICAgICAgIGF1dG8gcHJpb3JpdHkgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg0KTsKLSAgICAg
ICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCg2KTsKLQot
ICAgICAgICBpZiAoYXR0cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkgewotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIlxuQXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAiLCBhdHRyaWJ1dGlv
blRyaWdnZXJEYXRhLCAiXG5BdHRyaWJ1dGlvbiBwcmlvcml0eTogIiwgcHJpb3JpdHksICJcbkF0
dHJpYnV0aW9uIGVhcmxpZXN0IHRpbWUgdG8gc2VuZDogIik7Ci0gICAgICAgICAgICBpZiAoZWFy
bGllc3RUaW1lVG9TZW5kID09IC0xKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJO
b3Qgc2V0Iik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZHNVbnRpbFNlbmQgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZWFybGllc3RUaW1lVG9TZW5k
KSAtIFdhbGxUaW1lOjpub3coKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgoc2Vj
b25kc1VudGlsU2VuZCA+PSAyNF9oICYmIHNlY29uZHNVbnRpbFNlbmQgPD0gNDhfaCkgPyAiV2l0
aGluIDI0LTQ4IGhvdXJzIiA6ICJPdXRzaWRlIDI0LTQ4IGhvdXJzIik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxuTm8gYXR0cmli
dXRpb24gdHJpZ2dlciBkYXRhLiIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGEuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50
VG9TdHJpbmcoKQotewotICAgIGF1dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3Rz
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNU
IENPVU5UKCopIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQy
Il9zKTsKLSAgICBpZiAoIXByaXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudERhdGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgaWYgKCFwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPmNvbHVtbkludCgwKSAmJiAhcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhp
c3RzLT5jb2x1bW5JbnQoMSkpCi0gICAgICAgIHJldHVybiAiXG5ObyBzdG9yZWQgUHJpdmF0ZSBD
bGljayBNZWFzdXJlbWVudCBkYXRhLlxuIl9zOwotCi0gICAgYXV0byB1bmF0dHJpYnV0ZWRTY29w
ZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCwgYWxsVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSwgInByaXZhdGVDbGlja01l
YXN1cmVtZW50VG9TdHJpbmciX3MpOwotCi0gICAgaWYgKCF1bmF0dHJpYnV0ZWRTY29wZWRTdGF0
ZW1lbnQpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRUb1N0cmluZywgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgdW5hdHRyaWJ1dGVkTnVtYmVyID0gMDsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgd2hpbGUgKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gdW5hdHRyaWJ1dGVkTnVtYmVyID8gIiIgOiAiVW5hdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sg
TWVhc3VyZW1lbnRzOiI7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHByZWZpeCwgIlxuV2ViQ29y
ZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKyt1bmF0dHJpYnV0ZWROdW1iZXIsICdcbics
Ci0gICAgICAgICAgICBhdHRyaWJ1dGlvblRvU3RyaW5nKHVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCkpOwotICAgIH0KLQotICAgIGF1dG8gYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCA9
IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2FsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCwgYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnks
ICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKLQotICAgIGlmICghYXR0cmli
dXRlZFNjb3BlZFN0YXRlbWVudCkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVkTnVtYmVy
ID0gMDsKLSAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQotICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIiLCAiQXR0cmlidXRl
ZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRyaWJ1dGVkTnVtYmVy
ICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAotICAgICAgICAgICAgYXR0cmlidXRpb25Ub1N0
cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwotfQotCi1zdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJs
aWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9T
ZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmIGF0dHJpYnV0aW9u
KQotewotICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50LCBlYXJsaWVzdFRp
bWVzVG9TZW5kUXVlcnksICJlYXJsaWVzdFRpbWVzVG9TZW5kIl9zKTsKLQotICAgIGlmICghc2Nv
cGVkU3RhdGVtZW50Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCAqc291
cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKLSAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjplYXJsaWVzdFRpbWVzVG9TZW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1l
VG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZTsKLSAgICBzdGQ6Om9wdGlvbmFsPERl
c3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPiBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uOwotICAgIAotICAgIC8vIEEgdmFsdWUgb2YgMC4wIGluZGljYXRlcyB0aGF0IHRoZSByZXBv
cnQgaGFzIGJlZW4gc2VudCB0byB0aGUgcmVzcGVjdGl2ZSBzaXRlLgotICAgIGlmIChzY29wZWRT
dGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKSA+IDAuMCkKLSAgICAgICAgZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UgPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgwKTsKLSAgICAKLSAg
ICBpZiAoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkgPiAwLjApCi0gICAgICAgIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRv
dWJsZSgxKTsKLSAgICAKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZWFybGllc3RUaW1lVG9T
ZW5kVG9Tb3VyY2UsIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoU291cmNlRG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKQotewotICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVt
ZW50LCBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1Nv
dXJjZSJfcyk7Ci0KLSAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFp
bklEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2Us
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvbihTb3VyY2VEb21haW5JRCBzb3VyY2VTaXRlRG9tYWluSUQsIERlc3RpbmF0aW9u
RG9tYWluSUQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCi17Ci0gICAgYXV0byBzY29wZWRTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9tYXJrUmVwb3J0QXNTZW50VG9EZXN0aW5h
dGlvblN0YXRlbWVudCwgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25RdWVyeSwgIm1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uIl9zKTsKLQotICAgIGlmICghc2NvcGVkU3RhdGVtZW50
Ci0gICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCBzb3VyY2VTaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwg
ZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtS
ZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NU
UklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJTZW50QXR0cmlidXRpb24oV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQmJiBhdHRyaWJ1dGlvbiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uUmVw
b3J0RW5kcG9pbnQgYXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkKLXsgICAgCi0gICAgYXV0byB0
aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwotICAgIGF1dG8g
c291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Ci0gICAgYXV0byBk
ZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29uZDsKLQotICAg
IGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uc291cmNlU2l0
ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKLSAgICBhdXRvIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklE
ID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0cmFibGVEb21h
aW4pOwotCi0gICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKGF0dHJpYnV0aW9uUmVwb3J0
RW5kcG9pbnQpIHsKLSAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlv
blJlcG9ydEVuZHBvaW50OjpTb3VyY2U6Ci0gICAgICAgIGlmICghc291cmNlRWFybGllc3RUaW1l
VG9TZW5kKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgc291
cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50
OjpEZXN0aW5hdGlvbjoKLSAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2Vu
ZCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24oKnNv
dXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKLSAgICAgICAgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAg
Ly8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1bmxlc3MgaXQg
aGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBzaXRl
LgotICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3VyY2VFYXJsaWVz
dFRpbWVUb1NlbmQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY2xlYXJBdHRyaWJ1dGVk
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJPTSBBdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0g
PyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKLSAgICBpZiAoIWNsZWFyQXR0
cmlidXRlZFN0YXRlbWVudAotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGNs
ZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQpICE9IFNRTElURV9PSwotICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
clNlbnRBdHRyaWJ1dGlvbiBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
c0FzRXhwaXJlZEZvclRlc3RpbmcoKQotewotICAgIGF1dG8gZXhwaXJlZFRpbWVUb1NlbmQgPSBX
YWxsVGltZTo6bm93KCkgLSAxX2g7Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdp
blRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKLQotICAgIGF1dG8gZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2VTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRv
U291cmNlID0gPyJfcyk7Ci0gICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJVUERBVEUgQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uID0gbnVsbCJfcyk7Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3Rh
dGVtZW50Ci0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVtZW50LT5i
aW5kSW50KDEsIGV4cGlyZWRUaW1lVG9TZW5kLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkg
IT0gU1FMSVRFX09LCi0gICAgICAgIHx8IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwg
ZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZywgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi1TY29wZUV4aXQ8RnVu
Y3Rpb248dm9pZCgpPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpCi17Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24uaW5Qcm9n
cmVzcygpKQotICAgICAgICByZXR1cm4gbWFrZVNjb3BlRXhpdChGdW5jdGlvbjx2b2lkKCk+IHsg
W10geyB9IH0pOwotCi0gICAgbV90cmFuc2FjdGlvbi5iZWdpbigpOwotICAgIHJldHVybiBtYWtl
U2NvcGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbdGhpc10gewotICAgICAgICBtX3RyYW5zYWN0
aW9uLmNvbW1pdCgpOwotICAgIH0gfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
dW5kZWYgSVRQX1JFTEVBU0VfTE9HCi0jdW5kZWYgSVRQX1JFTEVBU0VfTE9HX0VSUk9SCi0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxMjk4NjgzODcxYzdlYmQzY2E3
OTQ5YjA1OGI0MzgwNTFkZWIxMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzNyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCi0jaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3Rh
dGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLSNpbmNsdWRlIDxw
YWwvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Njb3BlLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgU1FMaXRlRGF0YWJhc2U7
Ci1jbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NQcm9tcHRX
YXNTaG93biA6IGJvb2w7Ci1lbnVtIGNsYXNzIFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIDogYm9v
bDsKLXN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGlj
ID0gNTsKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RhdGlzdGljcyA9IDc7Ci1z
dGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dW5zaWduZWQsIG51bWJlck9mQnVja2V0c1BlclN0
YXRpc3RpYz4gYnVja2V0U2l6ZXMge3sgMSwgMywgMTAsIDUwLCAxMDAgfX07Ci0KLWNsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKLWNsYXNzIFByaXZhdGVDbGlja01lYXN1
cmVtZW50TWFuYWdlcjsKLQotdXNpbmcgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7Ci11c2luZyBVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50
OwotdXNpbmcgU291cmNlU2l0ZSA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpT
b3VyY2VTaXRlOwotdXNpbmcgQXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUgPSBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGU7Ci11c2lu
ZyBBdHRyaWJ1dGlvblRyaWdnZXJEYXRhID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQ6OkF0dHJpYnV0aW9uVHJpZ2dlckRhdGE7Ci11c2luZyBFeGlzdGluZ0NvbHVtbnMgPSBWZWN0
b3I8U3RyaW5nPjsKLXVzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJpbmc+OwotdXNp
bmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwotdXNpbmcgRXhwZWN0ZWRDb2x1bW5OYW1l
ID0gU3RyaW5nOwotdXNpbmcgU291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwotdXNp
bmcgRGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBkb3VibGU7Ci11c2luZyBTb3VyY2VE
b21haW5JRCA9IHVuc2lnbmVkOwotdXNpbmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVk
OwotCi10eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gVGFi
bGVBbmRJbmRleFBhaXI7Ci0KLS8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAv
IGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlz
dGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZp
bmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7Ci1wdWJsaWM6Ci0gICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxob3N0
LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7Ci0g
ICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKCk7Ci0KLSAgICBzdGF0aWMg
SGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSo+JiBhbGxTdG9yZXMo
KTsKLSAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYpOwotICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbG9zZSgpOwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3NpZnlQ
cmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVy
KERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBv
cGVuZXJJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2
b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYpIGZpbmFsOwotICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNH
cmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3JlOjpQ
YWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdy
YW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpT
dG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+
JiYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUsIFNlY29uZHMgZGVsYXlB
ZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5
VXNlcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0
aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VT
YW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICBib29sIGhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICBib29sIGlzQ29ycmVjdFN1YlN0YXRp
c3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCByZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmKSBjb25zdDsKLSAgICBTZWNvbmRzIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0Owot
ICAgIGJvb2wgaXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KLSAg
ICB2b2lkIHNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlz
TmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlRmlsZTsgfQotICAgIHZvaWQgcmVtb3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYWxs
RG9tYWlucygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
KGludCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gY2hlY2tGb3JNaXNzaW5n
VGFibGVzSW5TY2hlbWEoKTsKLSAgICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdE
YXlzUGFzc2VkLCBib29sIGhhc1VzZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFs
bEJ1dENvb2tpZURhdGFSZW1vdmFsLCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIGludGVycnVwdCgpOwotCi0gICAgLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KLSAg
ICB2b2lkIGluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFdlYkNvcmU6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50JiYsIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKSBv
dmVycmlkZTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNl
bmREYXRhPiBhdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYpIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clByaXZhdGVDbGlja01lYXN1cmVtZW50KHN0ZDo6b3B0aW9uYWw8UmVnaXN0cmFibGVEb21haW4+
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIHByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmco
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50JiYsIFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50KSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBpcmVkRm9yVGVzdGluZygpIG92ZXJyaWRl
OwotICAgIFZlY3RvcjxTdHJpbmc+IGNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHJpbmcmKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHZvaWQgdXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7Ci0KLSAgICB2b2lkIG9wZW5J
VFBEYXRhYmFzZSgpOwotICAgIHZvaWQgYWRkTWlzc2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgYm9vbCBtaXNzaW5nVW5pcXVlSW5kaWNlcygpOwotICAgIGJvb2wgbmVlZHNVcGRhdGVkU2No
ZW1hKCk7Ci0gICAgYm9vbCBuZWVkc1VwZGF0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFNjaGVt
YSgpOwotICAgIHZvaWQgcmVuYW1lQ29sdW1uSW5UYWJsZShTdHJpbmcmJiwgRXhpc3RpbmdDb2x1
bW5OYW1lJiYsIEV4cGVjdGVkQ29sdW1uTmFtZSYmKTsKLSAgICB2b2lkIGFkZE1pc3NpbmdDb2x1
bW5zVG9UYWJsZShTdHJpbmcmJiwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiwgY29uc3QgRXhwZWN0
ZWRDb2x1bW5zJik7Ci0gICAgdm9pZCBhZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5KCk7Ci0g
ICAgdm9pZCByZW5hbWVDb2x1bW5zSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHJlbmFtZUNvbHVt
bkluVGFibGUoKTsKLSAgICBUYWJsZUFuZEluZGV4UGFpciBjdXJyZW50VGFibGVBbmRJbmRleFF1
ZXJpZXMoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1cGRhdGVQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFNjaGVtYUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBlbmFibGVGb3JlaWduS2V5cygpOwot
ICAgIGJvb2wgbWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWREb21haW5zKCk7Ci0gICAgdm9pZCBt
aWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIGRlc3Ryb3lTdGF0
ZW1lbnRzKCk7Ci0gICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50QXV0b1Jlc2V0U2NvcGUgc2Nv
cGVkU3RhdGVtZW50KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+Jiwg
QVNDSUlMaXRlcmFsLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKLQotICAgIGJvb2wgaGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFN1YkZyYW1lRG9tYWluJikgY29u
c3Q7Ci0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNG
aXJzdFBhcnR5RG9tYWlucyh1bnNpZ25lZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICB2b2lkIG9wZW5BbmRVcGRhdGVTY2hlbWFJZk5lY2Vzc2FyeSgpOwotICAgIFN0cmlu
ZyBnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodW5zaWduZWQpIGNvbnN0OwotICAgIEFTQ0lJ
TGl0ZXJhbCBnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0g
ICAgdm9pZCBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJp
bmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0OwotICAgIHZvaWQgbWVy
Z2VTdGF0aXN0aWMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHZvaWQgbWVy
Z2UoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50KiwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYpOwotICAgIHZvaWQgY2xlYXJEYXRhYmFzZUNvbnRlbnRzKCk7Ci0gICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVTRURf
UkVUVVJOOwotICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5zaWdu
ZWQpOwotICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZmlyc3REb21haW5JRCwg
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7Ci0gICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGRvbWFpbkV4aXN0cyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlTGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxs
VGltZSk7Ci0gICAgdm9pZCB1cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBpbnQpOwotICAgIHZvaWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKLSAgICBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
cigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tC
dXRLZWVwQ29va2llc0ZvcigpIGNvbnN0OwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
ZG9tYWluc1dpdGhVc2VySW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkoKSBjb25zdDsKLSAgICBIYXNo
TWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gZG9tYWluc1dpdGhTdG9yYWdl
QWNjZXNzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
KFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEKTsKLSAgICB2b2lkIG1hcmtSZXBv
cnRBc1NlbnRUb1NvdXJjZShTb3VyY2VEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCk7Ci0g
ICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8U291cmNlRWFybGllc3RUaW1lVG9TZW5kPiwgc3Rk
OjpvcHRpb25hbDxEZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZD4+IGVhcmxpZXN0VGltZXNU
b1NlbmQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLQotICAgIHN0
cnVjdCBEb21haW5EYXRhIHsKLSAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7Ci0gICAgICAgIFJl
Z2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOwotICAgICAgICBXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b247Ci0gICAgICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKLSAgICAgICAgYm9vbCBpc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsOwotICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OwotICAgIH07Ci0g
ICAgVmVjdG9yPERvbWFpbkRhdGE+IGRvbWFpbnMoKSBjb25zdDsKLSAgICBib29sIGhhc0hhZFVu
ZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihjb25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5n
RGF0ZXNXaW5kb3cpOwotICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWdu
ZWQ+JiYpOwotICAgIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBoYXNVc2Vy
R3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRD
b3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKLSAgICBzdHJ1Y3QgTm90VmVyeVByZXZh
bGVudFJlc291cmNlcyB7Ci0gICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdHJhYmxlRG9t
YWluOwotICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVuY2U7Ci0gICAgICAg
IHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKLSAgICAgICAg
dW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50OwotICAgICAgICB1bnNp
Z25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7Ci0gICAgICAgIHVuc2lnbmVk
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKLSAgICB9OwotICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7Ci0KLSAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdDsKLQotICAgIGJvb2wgYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIoY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICBDb29raWVBY2Nlc3MgY29va2llQWNj
ZXNzKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLQot
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKLSAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFy
eURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJj
ZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwotICAgIHZvaWQgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VB
Y2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBzdGQ6Om9w
dGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VB
Y2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNz
V2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQoKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0gICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7
IE5vLCBZZXMgfTsKLSAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9uYWw8dW5z
aWduZWQ+PiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICBib29sIHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENo
ZWNrRm9yR3JhbmRmYXRoZXJpbmcpOwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2ll
c0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KTsKLSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwg
Ym9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICBSZWdpc3RyYWJsZURvbWFp
bnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0Rl
bGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNEYXRh
YmFzZVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBjcmVh
dGVVbmlxdWVJbmRpY2VzKCk7Ci0gICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKLSAgICBTdHJpbmcg
ZW5zdXJlQW5kTWFrZURvbWFpbkxpc3QoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFdhbGxUaW1lPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZShjb25zdCBEb21haW5EYXRhJik7Ci0gICAgCi0gICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0
ZWQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKLSAgICBXZWJDb3JlOjpQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFi
YXNlKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25UeXBlKTsKLSAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQqLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7
Ci0gICAgc3RkOjpwYWlyPHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+LCBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dD4+IGZpbmRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01l
YXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOwotCi0gICAgU2NvcGVFeGl0
PEZ1bmN0aW9uPHZvaWQoKT4+IFdBUk5fVU5VU0VEX1JFVFVSTiBiZWdpblRyYW5zYWN0aW9uSWZO
ZWNlc3NhcnkoKTsKLQotICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwot
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKLSAgICBtdXRh
YmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247Ci0gICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9t
YWluQ291bnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFRvcExldmVsRG9tYWluU3Rh
dGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0
YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3Rh
dGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
dXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVu
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0
ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRl
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0aFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRob3V0VXNl
ckludGVyYWN0aW9uU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1l
bnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX2dldEFsbERvbWFpbnNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2RvbWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRl
bWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc0V4aXN0c1N0
YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKLSAgICBt
dXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NjcmlwdExvYWRFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YkZy
YW1lRXhpc3RzU3RhdGVtZW50OwotICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudDsKLSAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQ7Ci0gICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudDsKLSAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudDsKLSAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4
cGlyZWRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jbGVhclVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9jbGVhckV4cGlyZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0
cmlidXRpb25zU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fYWxsQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZmluZFVu
YXR0cmlidXRlZFN0YXRlbWVudDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX2ZpbmRBdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlQXR0cmlidXRpb25zRWFybGllc3RU
aW1lVG9TZW5kU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fcmVtb3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNl
U3RhdGVtZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25TdGF0ZW1lbnQ7Ci0KLSAgICBQQUw6OlNl
c3Npb25JRCBtX3Nlc3Npb25JRDsKLSAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKLSAgICB1bnNpZ25lZCBtX29wZXJhdGluZ0RhdGVz
U2l6ZSB7IDAgfTsKLSAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fbG9uZ1dpbmRv
d09wZXJhdGluZ0RhdGU7Ci0gICAgc3RkOjpvcHRpb25hbDxPcGVyYXRpbmdEYXRlPiBtX3Nob3J0
V2luZG93T3BlcmF0aW5nRGF0ZTsKLSAgICBPcGVyYXRpbmdEYXRlIG1fbW9zdFJlY2VudE9wZXJh
dGluZ0RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
KQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0YWJhc2VTdG9yZSgpOyB9Ci1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhNzdlMDk4MGFlYTNkMjY1YTE2YTE4NTI0YjQ3ZWVjYmNiYjNjNjk3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0KLSNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKLSNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgS2V5ZWREZWNvZGVyOwotY2xhc3MgS2V5ZWRFbmNv
ZGVyOwotZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24gOiBib29sOwotZW51
bSBjbGFzcyBTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCA6IGJvb2w7Ci1zdHJ1Y3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljczsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIFRoaXMgaXMgYWx3
YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgewotcHVibGljOgotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBTdXNwZW5kYWJsZVdvcmtRdWV1ZSYsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3QpOwotCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGNv
bnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFVuaXF1ZVJlZjxXZWJDb3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPj4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcDsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4g
Y3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7Ci0gICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJv
bURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7Ci0KLSAgICB2b2lkIG1lcmdlU3RhdGlz
dGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXIsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
Y29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5hbDsKLSAgICBib29sIGlzUHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldEdyYW5kZmF0
aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKLSAg
ICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWlu
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBj
b25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBhcmVBbGxUaGlyZFBh
cnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwot
ICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBzdGQ6Om9wdGlvbmFs
PFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6
OkZyYW1lSWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3Jh
Z2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVz
KT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21h
aW4mJiwgVG9wRnJhbWVEb21haW4mJiwgV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyLCBXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duLCBX
ZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29y
ZTo6U3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgbG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29s
IGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQsIGJv
b2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpIG92ZXJyaWRlOwotICAgIHZvaWQgbG9n
VXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZFRvRG9t
YWluJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsK
LSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IE9wZXJhdGluZ0RhdGVzV2luZG93KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGFzdFNlZW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
bW92ZURhdGFGb3JEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKLSAg
ICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgdW5zaWduZWQgbnVtYmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkLCBib29sIGhhc1Vz
ZXJJbnRlcmFjdGlvbiwgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFs
LCBib29sIGlzUHJldmFsZW50KSBvdmVycmlkZTsKLQotICAgIC8vIFByaXZhdGUgQ2xpY2sgTWVh
c3VyZW1lbnQgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBJVFAgbWVtb3J5IHN0b3JlLgotICAg
IHZvaWQgaW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoV2ViQ29yZTo6UHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQmJiwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUpIG92
ZXJyaWRlIHsgfTsKLSAgICB2b2lkIG1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmcoKSBvdmVycmlkZSB7IH07Ci0gICAgc3RkOjpvcHRp
b25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRz
VW50aWxTZW5kRGF0YT5hdHRyaWJ1dGVQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6
OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYsIFdl
YkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhJiYp
IG92ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpIG92
ZXJyaWRlIHsgcmV0dXJuIHsgfTsgfTsKLSAgICB2b2lkIGNsZWFyUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoc3RkOjpvcHRpb25hbDxSZWdpc3RyYWJsZURvbWFpbj4pIG92ZXJyaWRlIHsgfTsKLSAg
ICB2b2lkIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkgb3ZlcnJpZGUgeyB9
OwotICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgb3ZlcnJpZGUg
eyByZXR1cm4gU3RyaW5nKCk7IH07Ci0gICAgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRwb2ludCkgb3ZlcnJpZGUgeyB9OwotICAgIHZv
aWQgbWFya0F0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0
aW5nKCkgb3ZlcnJpZGUgeyB9OwotCi1wcml2YXRlOgotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNP
cGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKSBvdmVycmlkZTsKLSAgICBjb25zdCBWZWN0b3I8T3Bl
cmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpbmdE
YXRlczsgfQotICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIG92ZXJyaWRlIHsgbV9vcGVy
YXRpbmdEYXRlcy5jbGVhcigpOyB9Ci0gICAgdm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYmKTsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7Ci0g
ICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+JiYgbmV3RGF0ZXMpOwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIE9wZXJhdGluZ0RhdGVzV2luZG93KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIHN0YXRpYyBib29sIHNob3VsZEJs
b2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBz
dGF0aWMgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVk
U3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNl
bnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIE9wZXJhdGluZ0RhdGVz
V2luZG93KSBjb25zdDsKLSAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcp
IGNvbnN0OwotICAgIGJvb2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0ZvcihSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSBjb25zdDsK
LSAgICBib29sIHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKLSAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwotICAgIHVuc2lnbmVk
IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9Eb21haW4+
JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9pZCBncmFu
dFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6
OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9y
YWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwotICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNS
ZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotICAgIGJvb2wg
aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92
ZXJyaWRlOwotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAg
UmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IgcmVnaXN0
cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKSBvdmVycmlkZTsK
LSAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgSGFzaE1hcDxSZWdpc3RyYWJs
ZURvbWFpbiwgVW5pcXVlUmVmPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+PiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKQotICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
c3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzTWVtb3J5U3RvcmUoKTsgfQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKaW5kZXggZWJlMjM1MzY1NGUwOWEyMjE1ODdiMjU3YWVlNjg3NmVjZjUzMTZl
Mi4uN2JhZjM3YmM4OTQyZWM2ZGEyMzhmMjJjZmRmMjk4NWQyNGVlOThiYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTI5LDEwNSArMjksMzEzOCBA
QAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKICNpbmNsdWRlICJMb2dn
aW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vz
c2lvbi5oIgogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKLSNpbmNsdWRlIDxX
ZWJDb3JlL0Nvb2tpZUphci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0NvbnNvbGVUeXBl
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRTdG9yYWdlQWNjZXNzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyR2VzdHVyZUluZGljYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYv
Q3Jvc3NUaHJlYWRDb3BpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Sb2Jpbkhvb2RIYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9TdXNwZW5kYWJsZVdvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1
aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwg
eyA1X3MgfTsKKyNkZWZpbmUgSVRQX1JFTEVBU0VfTE9HKHNlc3Npb25JRCwgZm10LCAuLi4pIFJF
TEVBU0VfTE9HKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6IiBm
bXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIElUUF9SRUxFQVNFX0xPR19FUlJPUihz
ZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorCisv
LyBDT1VOVCBRdWVyaWVzCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkg
PSAiU0VMRUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1
dG8gY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSA9ICJTRUxFQ1QgQ09VTlQoKikgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gPzsiX3M7Citjb25zdGV4cHIgYXV0byBjb3VudFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRv
RG9tYWluSUQgPSA/OyJfczsKK2NvbnN0ZXhwciBhdXRvIGNvdW50UHJldmFsZW50UmVzb3VyY2Vz
UXVlcnkgPSAiU0VMRUNUIENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDE7Il9zOworY29uc3RleHByIGF1dG8g
Y291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNU
IENPVU5UKERJU1RJTkNUIHJlZ2lzdHJhYmxlRG9tYWluKSBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDE7Il9zOworCitj
b25zdGV4cHIgYXV0byBjb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rp
b25RdWVyeSA9ICJTRUxFQ1QgQ09VTlQoRElTVElOQ1QgcmVnaXN0cmFibGVEb21haW4pIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSBBTkQgaGFkVXNlckludGVyYWN0
aW9uID0gMDsiX3M7CisKKy8vIElOU0VSVCBPUiBJR05PUkUgUXVlcmllcworY29uc3RleHByIGF1
dG8gaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFp
bnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAg
ICAibW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFs
ZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSwgaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVE
YXRhUmVtb3ZhbCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsK
K2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8g
VG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgT1IgSUdOT1JFIElOVE8gU3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5J
RCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIChzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIHdoZXJlIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3Rl
eHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZv
cmNlbWVudFF1ZXJ5ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IChzb3VyY2VEb21haW5JRCwgdG9E
b21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIHdoZXJlIHJl
Z2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIE9SIElHTk9SRSBJTlRPIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRv
bWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICgg
Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c1F1ZXJ5
ID0gIklOU0VSVCBPUiBJR05PUkUgaW50byBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRz
ICh0b3BGcmFtZURvbWFpbklELCBzdWJyZXNvdXJjZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgd2hlcmUgcmVnaXN0cmFibGVEb21haW4gaW4gKCAiX3M7
Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJ
TlNFUlQgT1IgSUdOT1JFIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJy
ZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKKworLy8gSU5T
RVJUIE9SIFJFUExBQ0UgUXVlcmllcworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIGludG8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgbGFzdFVwZGF0ZWQsIHRvcEZyYW1lRG9t
YWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyB3aGVyZSBy
ZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lTGlua0Rl
Y29yYXRpb25zRnJvbVF1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gVG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tICh0b0RvbWFpbklELCBsYXN0VXBkYXRlZCwgZnJvbURvbWFpbklEKSBT
RUxFQ1QgPywgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gaW4gKCAiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIE9SIFJFUExBQ0UgSU5UTyBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFpbklELCBsYXN0VXBkYXRlZCwgdG9wRnJh
bWVEb21haW5JRCkgU0VMRUNUID8sID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluIGluICggIl9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBPUiBSRVBMQUNFIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3VyY2VEb21haW5JRCwgbGFzdFVwZGF0ZWQs
IHRvRG9tYWluSUQpIFNFTEVDVCA/LCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiBpbiAoICJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFVu
YXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiSU5TRVJUIE9SIFJFUExB
Q0UgSU5UTyBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURv
bWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCwgIgorICAgICJzb3VyY2VJRCwgdGltZU9m
QWRDbGljaywgdG9rZW4sIHNpZ25hdHVyZSwga2V5SUQpIFZBTFVFUyAoPywgPywgPywgPywgPywg
PywgPykiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRRdWVyeSA9ICJJTlNFUlQgT1IgUkVQTEFDRSBJTlRPIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCAoc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCwgIgorICAgICJzb3VyY2VJRCwgYXR0cmlidXRpb25UcmlnZ2VyRGF0YSwgcHJpb3JpdHks
IHRpbWVPZkFkQ2xpY2ssIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0
dXJlLCBrZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgVkFMVUVTICg/LCA/
LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKKworLy8gRVhJU1RTIFF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNF
TEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCB0b3BGcmFtZURvbWFpbklEID0g
KFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291cmNlRG9tYWluSUQg
PSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RT
IChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7
Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb21FeGlzdHNRdWVyeSA9
ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bSBXSEVSRSB0b0RvbWFpbklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c0V4
aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cyBXSEVSRSB0b3BGcmFtZURvbWFpbklEID0gPyAiCisgICAgIkFORCBz
dWJyZXNvdXJjZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN0b3Jh
Z2VBY2Nlc3NFeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExl
dmVsRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworCisvLyBVUERBVEUgUXVlcmllcworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiX3MKKyAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwor
Y29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkUXVlcnkgPSAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5
ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVWZXJ5UHJldmFsZW50
UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ZlcnlQcmV2YWxl
bnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNs
ZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxs
QnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudEFzRXhwaXJlZFF1ZXJ5ID0gIlVQREFURSBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCBTRVQgdGltZU9mQWRDbGljayA9IC0xLjAiX3M7Citjb25zdGV4cHIg
YXV0byBtYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2VRdWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSA9IG51
bGwgV0hFUkUgc291cmNlU2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gbWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb25R
dWVyeSA9ICJVUERBVEUgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNFVCBlYXJs
aWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uID0gbnVsbCBXSEVSRSBzb3VyY2VTaXRlRG9tYWlu
SUQgPSA/IEFORCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7CisKKy8vIFNFTEVDVCBR
dWVyaWVzCitjb25zdGV4cHIgYXV0byBkb21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1Qg
ZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gZG9tYWluU3RyaW5nRnJvbURvbWFpbklEUXVlcnkgPSAiU0VM
RUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklE
ID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxF
Q1QgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSA9
ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1
ZXJ5ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVF1ZXJ5ID0gIlNFTEVDVCAqIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhw
ciBhdXRvIGdldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBRdWVyeSA9ICJTRUxFQ1QgTUFY
KGxhc3RVcGRhdGVkKSBGUk9NIChTRUxFQ1QgbGFzdFVwZGF0ZWQgRlJPTSBTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IGFuZCB0b3BGcmFtZURv
bWFpbklEID0gPyJfcworICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gVG9w
RnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIFdIRVJFIHRvRG9tYWluSUQgPSA/IGFuZCBmcm9tRG9t
YWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIGxhc3RVcGRhdGVkIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBh
bmQgdG9wRnJhbWVEb21haW5JRCA9ID8iCisgICAgIlVOSU9OIEFMTCBTRUxFQ1QgbGFzdFVwZGF0
ZWQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9t
YWluSUQgPSA/IGFuZCB0b0RvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBnZXRBbGxE
b21haW5zUXVlcnkgPSAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21h
aW5zIl9zOworY29uc3RleHByIGF1dG8gZ2V0QWxsU3ViU3RhdGlzdGljc1VuZGVyRG9tYWluUXVl
cnkgPSAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNU
IHRvcEZyYW1lRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IgorICAgICJVTklPTiBBTEwgU0VMRUNUIHRvRG9t
YWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/Il9zOworY29uc3RleHByIGF1dG8gYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvbnNRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIFVuYXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworY29uc3RleHByIGF1dG8gYWxsQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiU0VMRUNUICosIE1JTihlYXJsaWVz
dFRpbWVUb1NlbmRUb1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbikgYXMg
bWluVmFsICIKKyAgICAiRlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hF
UkUgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2UgSVMgTk9UIE5VTEwgQU5EIGVhcmxpZXN0VGlt
ZVRvU2VuZFRvRGVzdGluYXRpb24gSVMgTk9UIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNU
ICosIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIGFzIG1pblZhbCBGUk9NIEF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBlYXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0
aW9uIElTIE5VTEwgIgorICAgICJVTklPTiBBTEwgU0VMRUNUICosIGVhcmxpZXN0VGltZVRvU2Vu
ZFRvRGVzdGluYXRpb24gYXMgbWluVmFsIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IFdIRVJFIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlIElTIE5VTEwgT1JERVIgQlkg
bWluVmFsIl9zOworY29uc3RleHByIGF1dG8gZmluZFVuYXR0cmlidXRlZFF1ZXJ5ID0gIlNFTEVD
VCAqIEZST00gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNl
U2l0ZURvbWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zOworY29u
c3RleHByIGF1dG8gZmluZEF0dHJpYnV0ZWRRdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQgPSA/IEFO
RCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBlYXJsaWVz
dFRpbWVzVG9TZW5kUXVlcnkgPSAiU0VMRUNUIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCBl
YXJsaWVzdFRpbWVUb1NlbmRUb0Rlc3RpbmF0aW9uIEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9u
U2l0ZURvbWFpbklEID0gPyJfczsKKworLy8gRVhJU1RTIGZvciB0ZXN0aW5nIHF1ZXJpZXMKK2Nv
bnN0ZXhwciBhdXRvIGxpbmtEZWNvcmF0aW9uRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUICogRlJPTSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gV0hFUkUgdG9Eb21haW5J
RCA9ID8gT1IgZnJvbURvbWFpbklEID0gPykiX3M7Citjb25zdGV4cHIgYXV0byBzY3JpcHRMb2Fk
RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzIFdIRVJFIHRvcEZyYW1lRG9tYWluSUQgPSA/IE9SIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YkZyYW1lRXhpc3RzUXVlcnkg
PSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUICogRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJf
czsKK2NvbnN0ZXhwciBhdXRvIHN1YlJlc291cmNlRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNU
UyAoU0VMRUNUICogRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSA/IE9SIHRvcEZyYW1lRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0
ZXhwciBhdXRvIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VM
RUNUICogRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSA/IE9SIHRvRG9tYWluSUQgPSA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIG9ic2Vy
dmVkRG9tYWluc0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAqIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPykiX3M7CisKKy8vIERFTEVURSBRdWVyaWVz
Citjb25zdGV4cHIgYXV0byByZW1vdmVBbGxEYXRhUXVlcnkgPSAiREVMRVRFIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIGRvbWFpbklEID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNsZWFyVW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJERUxFVEUgRlJPTSBVbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSBzb3VyY2VTaXRlRG9tYWluSUQg
TElLRSA/IE9SIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIExJS0UgPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGNsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnkgPSAiREVMRVRF
IEZST00gQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJFIHNvdXJjZVNpdGVE
b21haW5JRCBMSUtFID8gT1IgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgTElLRSA/Il9zOworY29u
c3RleHByIGF1dG8gY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSA9ICJE
RUxFVEUgRlJPTSBVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBXSEVSRSA/ID4g
dGltZU9mQWRDbGljayJfczsKK2NvbnN0ZXhwciBhdXRvIHJlbW92ZVVuYXR0cmlidXRlZFF1ZXJ5
ID0gIkRFTEVURSBGUk9NIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFdIRVJF
IHNvdXJjZVNpdGVEb21haW5JRCA9ID8gQU5EIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEID0gPyJf
czsKKworY29uc3RleHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxF
IE9ic2VydmVkRG9tYWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBy
ZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBs
YXN0U2VlbiBSRUFMIE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VS
IE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBn
cmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdF
UiBOT1QgTlVMTCwgaXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRz
UmVtb3ZlZCBJTlRFR0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCwiCisgICAgImlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgSU5URUdFUiBOT1QgTlVMTCkiX3M7
CisKK2VudW0geworICAgIERvbWFpbklESW5kZXgsCisgICAgUmVnaXN0cmFibGVEb21haW5JbmRl
eCwKKyAgICBMYXN0U2VlbkluZGV4LAorICAgIEhhZFVzZXJJbnRlcmFjdGlvbkluZGV4LAorICAg
IE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lSW5kZXgsCisgICAgR3JhbmRmYXRoZXJlZElu
ZGV4LAorICAgIElzUHJldmFsZW50SW5kZXgsCisgICAgSXNWZXJ5UHJldmFsZW50SW5kZXgsCisg
ICAgRGF0YVJlY29yZHNSZW1vdmVkSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsCisgICAgVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LAorICAgIElzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWxJbmRleAorfTsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxE
b21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKCIKKyAgICAidG9wTGV2ZWxE
b21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlH
TiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlu
cyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8g
Y3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04gS0VZKGRvbWFpbklE
KSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUs
ICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZl
ZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291cmNlRG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZ
KHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNF
UyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29u
c3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCA9ICJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCAoIgorICAgICJzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9S
RUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9z
OworCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAi
Q1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJ0YXJnZXRE
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
IgorICAgICJGT1JFSUdOIEtFWSh0YXJnZXREb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKSJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gKCIK
KyAgICAidG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWSh0
b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZFUkVOQ0VTIE9i
c2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4
cHIgYXV0byBjcmVhdGVUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzID0gIkNSRUFURSBU
QUJMRSBUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzICgiCisgICAgInRvcEZyYW1lRG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUpIl9zOworCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwg
bGFzdFVwZGF0ZWQgUkVBTCBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdO
IEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkgT04gREVMRVRFIENBU0NBREUpIl9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsIGxhc3RVcGRhdGVkIFJFQUwgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWluSUQgSU5U
RUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKyAgICAKK2NvbnN0ZXhwciBh
dXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCBsYXN0VXBkYXRlZCBSRUFMIE5PVCBOVUxMLCB0b0RvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSkiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBj
cmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElO
VEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZP
UkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FT
Q0FERSkiX3M7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZU9wZXJhdGluZ0RhdGVzID0gIkNSRUFU
RSBUQUJMRSBPcGVyYXRpbmdEYXRlcyAoIgorICAgICJ5ZWFyIElOVEVHRVIgTk9UIE5VTEwsIG1v
bnRoIElOVEVHRVIgTk9UIE5VTEwsIG1vbnRoRGF5IElOVEVHRVIgTk9UIE5VTEwpIl9zOworCitj
b25zdGV4cHIgYXV0byBjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9
ICJDUkVBVEUgVEFCTEUgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAg
ICAic291cmNlU2l0ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURv
bWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAg
ICAidGltZU9mQWRDbGljayBSRUFMIE5PVCBOVUxMLCB0b2tlbiBURVhULCBzaWduYXR1cmUgVEVY
VCwga2V5SUQgVEVYVCwgRk9SRUlHTiBLRVkoc291cmNlU2l0ZURvbWFpbklEKSAiCisgICAgIlJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9S
RUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgIgorICAgICJPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKSJfczsKKworY29uc3RleHBy
IGF1dG8gY3JlYXRlQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50ID0gIkNSRUFURSBU
QUJMRSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCIKKyAgICAic291cmNlU2l0
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHNvdXJjZUlEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiYXR0cmlidXRp
b25UcmlnZ2VyRGF0YSBJTlRFR0VSIE5PVCBOVUxMLCBwcmlvcml0eSBJTlRFR0VSIE5PVCBOVUxM
LCB0aW1lT2ZBZENsaWNrIFJFQUwgTk9UIE5VTEwsICIKKyAgICAiZWFybGllc3RUaW1lVG9TZW5k
VG9Tb3VyY2UgUkVBTCwgdG9rZW4gVEVYVCwgc2lnbmF0dXJlIFRFWFQsIGtleUlEIFRFWFQsIGVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gUkVBTCwgIgorICAgICJGT1JFSUdOIEtFWShz
b3VyY2VTaXRlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZGVzdGluYXRpb25TaXRlRG9tYWluSUQpIFJF
RkVSRU5DRVMgIgorICAgICJPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKSJfczsKKworLy8gQ1JFQVRFIFVOSVFVRSBJTkRFWCBRdWVyaWVzLgorY29uc3RleHByIGF1
dG8gY3JlYXRlVW5pcXVlSW5kZXhTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc19kb21haW5JRF90b3BMZXZlbERvbWFpbklEIG9uIFN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyAoIGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEICkiX3M7Citjb25z
dGV4cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9fc291cmNlRG9tYWluSURfdG9Eb21haW5JRCBvbiBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
ICggc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudF9zb3VyY2VEb21h
aW5JRF90b0RvbWFpbklEIG9uIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQgKCBzb3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCApIl9zOworY29u
c3RleHByIGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20g
PSAiQ1JFQVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbV90YXJnZXREb21haW5JRF9mcm9tRG9tYWluSUQgb24gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tICggdGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCApIl9zOworY29uc3RleHBy
IGF1dG8gY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20gPSAiQ1JF
QVRFIFVOSVFVRSBJTkRFWCBJRiBOT1QgRVhJU1RTIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJv
bV90b0RvbWFpbklEX2Zyb21Eb21haW5JRCBvbiBUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20g
KCB0b0RvbWFpbklELCBmcm9tRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cyA9ICJDUkVBVEUgVU5JUVVF
IElOREVYIElGIE5PVCBFWElTVFMgVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0c190b3BG
cmFtZURvbWFpbklEX3N1YnJlc291cmNlRG9tYWluSUQgb24gVG9wRnJhbWVMb2FkZWRUaGlyZFBh
cnR5U2NyaXB0cyAoIHRvcEZyYW1lRG9tYWluSUQsIHN1YnJlc291cmNlRG9tYWluSUQgKSJfczsK
K2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluc19zdWJGcmFtZURvbWFpbklEX3RvcEZyYW1lRG9tYWluSUQgb24gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YkZyYW1lRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgU3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc19zdWJyZXNvdXJjZURvbWFpbklEX3RvcEZyYW1l
RG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIHN1YnJlc291cmNl
RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVVu
aXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVU5JUVVFIElO
REVYIElGIE5PVCBFWElTVFMgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb19zdWJyZXNvdXJj
ZURvbWFpbklEX3RvRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIHN1
YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQgKSJfczsKK2NvbnN0ZXhwciBhdXRvIGNyZWF0
ZVVuaXF1ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21fc3Vi
cmVzb3VyY2VEb21haW5JRF9mcm9tRG9tYWluSUQgb24gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tICggc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEICkiX3M7Citjb25zdGV4
cHIgYXV0byBjcmVhdGVVbmlxdWVJbmRleE9wZXJhdGluZ0RhdGVzID0gIkNSRUFURSBVTklRVUUg
SU5ERVggSUYgTk9UIEVYSVNUUyBPcGVyYXRpbmdEYXRlc195ZWFyX21vbnRoX21vbnRoRGF5IG9u
IE9wZXJhdGluZ0RhdGVzICggeWVhciwgbW9udGgsIG1vbnRoRGF5ICkiX3M7Citjb25zdGV4cHIg
YXV0byBjcmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
ID0gIkNSRUFURSBVTklRVUUgSU5ERVggSUYgTk9UIEVYSVNUUyBVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudF9zb3VyY2VTaXRlRG9tYWluSURfZGVzdGluYXRpb25TaXRlRG9tYWlu
SUQgb24gVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9t
YWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEICkiX3M7Citjb25zdGV4cHIgYXV0byBjcmVh
dGVVbmlxdWVJbmRleEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9ICJDUkVBVEUg
VU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50X3NvdXJjZVNpdGVEb21haW5JRF9kZXN0aW5hdGlvblNpdGVEb21haW5JRCBvbiBBdHRyaWJ1
dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgKCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEICkiX3M7CisKKy8vIEFkZCBvbmUgdG8gdGhlIGNvdW50IG9mIHRoZSBh
Ym92ZSBpbmRleCBxdWVyaWVzIHRvIGFjY291bnQgZm9yIHRoZSBPYnNlcnZlZERvbWFpbnMgdGFi
bGUsIHdoaWNoIGhhcyBhbiBpbmRleCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgU1FMaXRlIGJl
Y2F1c2Ugb2YgaXRzIHByaW1hcnkga2V5LgorY29uc3QgaW50IGV4cGVjdGVkSW5kZXhDb3VudCA9
IDE0OworCitzdGF0aWMgY29uc3QgU3RyaW5nIE9ic2VydmVkRG9tYWluc1RhYmxlU2NoZW1hVjEo
KQoreworICAgIHJldHVybiBjcmVhdGVPYnNlcnZlZERvbWFpbjsKK30KIAotc3RhdGljIFN0cmlu
ZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKK3N0YXRpYyBjb25zdCBTdHJpbmcgT2JzZXJ2ZWREb21haW5zVGFibGVTY2hlbWFWMUFsdGVy
bmF0ZSgpCiB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkg
PyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKKyAgICByZXR1cm4gIkNSRUFURSBUQUJMRSBcIk9ic2VydmVkRG9tYWluc1wiIChkb21h
aW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxM
IFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2Vy
SW50ZXJhY3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUgUkVBTCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZh
bGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
ZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCxpc1NjaGVk
dWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIElOVEVHRVIgTk9UIE5VTEwpIl9zOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQorc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRV
bmF0dHJpYnV0ZWRDb2x1bW5zKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgYXV0byBjb2x1bW5zID0g
bWFrZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsgInNvdXJjZVNpdGVEb21haW5JRCJf
cywgImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zLCAic291cmNlSUQiX3MsICJ0aW1lT2ZBZENs
aWNrIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJrZXlJRCJfcyB9KTsKKyAgICByZXR1
cm4gY29sdW1ucy5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhw
ZWN0ZWRBdHRyaWJ1dGVkQ29sdW1ucygpCit7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gY29sdW1u
cyA9IG1ha2VOZXZlckRlc3Ryb3llZChWZWN0b3I8U3RyaW5nPiB7ICJzb3VyY2VTaXRlRG9tYWlu
SUQiX3MsICJkZXN0aW5hdGlvblNpdGVEb21haW5JRCJfcywgInNvdXJjZUlEIl9zLCAiYXR0cmli
dXRpb25UcmlnZ2VyRGF0YSJfcywgInByaW9yaXR5Il9zLCAidGltZU9mQWRDbGljayJfcywgImVh
cmxpZXN0VGltZVRvU2VuZFRvU291cmNlIl9zLCAidG9rZW4iX3MsICJzaWduYXR1cmUiX3MsICJr
ZXlJRCJfcywgImVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24iX3MgfSk7CisgICAgcmV0
dXJuIGNvbHVtbnMuZ2V0KCk7Cit9CisKK3N0YXRpYyBib29sIG5lZWRzTmV3Q3JlYXRlVGFibGVT
Y2hlbWEoY29uc3QgU3RyaW5nJiBzY2hlbWEpCit7CisgICAgcmV0dXJuIHNjaGVtYS5jb250YWlu
cygiUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMiKTsKK30KKworc3RhdGljIFN0cmluZyBzdHJp
cEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY29uc3QgY2hhciogb3JpZ2luYWxRdWVyeSkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKG9yaWdpbmFsUXVlcnkpLnJlcGxhY2UoIkNSRUFURSBVTklR
VUUgSU5ERVggSUYgTk9UIEVYSVNUUyIsICJDUkVBVEUgVU5JUVVFIElOREVYIik7Cit9CisKK3N0
YXRpYyBjb25zdCBNZW1vcnlDb21wYWN0TG9va3VwT25seVJvYmluSG9vZEhhc2hNYXA8U3RyaW5n
LCBUYWJsZUFuZEluZGV4UGFpcj4mIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKQorewor
ICAgIHN0YXRpYyBhdXRvIGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoTWVtb3J5Q29tcGFjdExvb2t1cE9ubHlSb2Jpbkhvb2RIYXNoTWFwPFN0cmluZywg
VGFibGVBbmRJbmRleFBhaXI+IHsKKyAgICAgICAgeyAiT2JzZXJ2ZWREb21haW5zIl9zLCBzdGQ6
Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlT2JzZXJ2ZWRE
b21haW4sIHN0ZDo6bnVsbG9wdCkgfSwKKyAgICAgICAgeyAiVG9wTGV2ZWxEb21haW5zIl9zLCBz
dGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wTGV2
ZWxEb21haW5zLCBzdGQ6Om51bGxvcHQpIH0sCisgICAgICAgIHsgIlN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWlucyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4+KGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucywgc3RyaXBJ
bmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgfSwKKyAgICAgICAgeyAiVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbyJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+
KGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hT
dG9yZWRWYWx1ZShjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB9
LAorICAgICAgICB7ICJUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50Il9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPj4oY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RF
bmZvcmNlbWVudCwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudCkpIH0sCisgICAgICAgIHsgIlRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbSwgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNy
ZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAg
eyAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcs
IHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9t
LCBzdHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhUb3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20pKSB9LAorICAgICAgICB7ICJUb3BGcmFtZUxvYWRlZFRo
aXJkUGFydHlTY3JpcHRzIl9zLCBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPj4oY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cywgc3RyaXBJbmRl
eFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVMb2FkZWRU
aGlyZFBhcnR5U2NyaXB0cykpIH0sCisgICAgICAgIHsgIlN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMiX3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+Pihj
cmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCBzdHJpcEluZGV4UXVlcnlUb01hdGNo
U3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
KSkgfSwKKyAgICAgICAgeyAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyJfcywgc3Rk
OjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHN0cmlwSW5kZXhRdWVyeVRvTWF0Y2hTdG9yZWRWYWx1
ZShjcmVhdGVVbmlxdWVJbmRleFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB9LAor
ICAgICAgICB7ICJTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIl9zLCBzdGQ6Om1ha2VfcGFp
cjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4oY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1
ZUluZGV4U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykpIH0sCisgICAgICAgIHsgIlN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4+KGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgfSwKKyAgICAgICAgeyAiT3BlcmF0aW5nRGF0ZXMi
X3MsIHN0ZDo6bWFrZV9wYWlyPFN0cmluZywgc3RkOjpvcHRpb25hbDxTdHJpbmc+PihjcmVhdGVP
cGVyYXRpbmdEYXRlcywgc3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVu
aXF1ZUluZGV4T3BlcmF0aW5nRGF0ZXMpKSB9LAorICAgICAgICB7ICJVbmF0dHJpYnV0ZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4+KGNyZWF0ZVVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50LCBz
dHJpcEluZGV4UXVlcnlUb01hdGNoU3RvcmVkVmFsdWUoY3JlYXRlVW5pcXVlSW5kZXhVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIH0sCisgICAgICAgIHsgIkF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcywgc3RkOjptYWtlX3BhaXI8U3RyaW5nLCBzdGQ6Om9w
dGlvbmFsPFN0cmluZz4+KGNyZWF0ZUF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwg
c3RyaXBJbmRleFF1ZXJ5VG9NYXRjaFN0b3JlZFZhbHVlKGNyZWF0ZVVuaXF1ZUluZGV4QXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSkgfQorICAgIH0pOworICAgIAorICAgIHJldHVy
biBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q29udGFpbmVyVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IENvbnRhaW5lclR5
cGUmIHZhbHVlcykKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IuZG9tYWlu
c1RvRGVsZXRlQWxsQ29va2llc0ZvcikKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVpbGRlci5p
c0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmcoKSwgIihhbGwgZGF0YSkiKTsKLSAg
ICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNvb2tpZXNGb3IpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIgOiAiLCAiLCBkb21haW4uc3RyaW5n
KCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVEYXRhRm9yLmRvbWFpbnNUb0RlbGV0
ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQotICAgICAgICBidWlsZGVyLmFwcGVuZChidWls
ZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0cmluZygpLCAiKGFsbCBidXQgY29v
a2llcykiKTsKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGlmIGNv
bnN0ZXhwciAoc3RkOjppc19hcml0aG1ldGljX3Y8c3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVj
bHR5cGUodmFsdWUpPj4pCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1w
dHkoKSA/ICIiIDogIiwgIiwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB2YWx1ZSwgJyIn
KTsKKyAgICB9CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotT3BlcmF0aW5n
RGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKK0hhc2hTZXQ8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKj4mIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWxsU3RvcmVzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSo+PiBtYXA7CisgICAgcmV0dXJuIG1hcDsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1ZSwgU2hvdWxkSW5j
bHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCBjb25zdCBTdHJpbmcmIHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgICwgbV9zaG91bGRJbmNs
dWRlTG9jYWxob3N0KHNob3VsZEluY2x1ZGVMb2NhbGhvc3QpCisgICAgLCBtX3Nlc3Npb25JRChz
ZXNzaW9uSUQpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKEZpbGVTeXN0ZW06OnBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChzdG9yYWdlRGlyZWN0b3J5UGF0aCwgIm9ic2VydmF0aW9ucy5k
YiJfcykpCisgICAgLCBtX3RyYW5zYWN0aW9uKG1fZGF0YWJhc2UpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBvcGVuQW5kVXBkYXRlU2NoZW1hSWZOZWNlc3Nhcnko
KTsKKyAgICBlbmFibGVGb3JlaWduS2V5cygpOworCisgICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5n
IGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkgYmUgY2Fs
bGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRocmVhZGlu
Z0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1Zh
Y3V1bSgpKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7CisgICAgYWxsU3RvcmVzKCkuYWRkKHRoaXMpOworfQorCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIGNsb3Nl
KCk7CisgICAgYWxsU3RvcmVzKCkucmVtb3ZlKHRoaXMpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xvc2UoKQoreworICAgIGRlc3Ryb3lTdGF0ZW1lbnRzKCk7Cisg
ICAgaWYgKG1fZGF0YWJhc2UuaXNPcGVuKCkpCisgICAgICAgIG1fZGF0YWJhc2UuY2xvc2UoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSgp
Cit7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1fc3RvcmFnZURpcmVjdG9yeVBh
dGgpKSB7CisgICAgICAgIGlmICghRmlsZVN5c3RlbTo6bWFrZUFsbERpcmVjdG9yaWVzKEZpbGVT
eXN0ZW06OnBhcmVudFBhdGgobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiBGYWlsZWQgdG8gY3JlYXRlIGRpcmVj
dG9yeSBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9zdG9yYWdl
RGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VGaWxlID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorICAgIAorICAgIGF1dG8gc2V0QnVzeVRpbWVvdXQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnQoIlBSQUdNQSBidXN5X3RpbWVvdXQgPSA1MDAwIl9zKTsKKyAgICBpZiAoIXNldEJ1
c3lUaW1lb3V0IHx8IHNldEJ1c3lUaW1lb3V0LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEJ1c3lUaW1lb3V0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUpIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCBkYXRhYmFzZSBwYXRoOiAl
IiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9z
dG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
CitzdGQ6Om9wdGlvbmFsPFZlY3RvcjxTdHJpbmc+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBtaXNzaW5nVGFibGVzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgMSBmcm9tIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZT0ndGFibGUn
IGFuZCB0YmxfbmFtZT0/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBt
ZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgZm9yIChh
dXRvJiB0YWJsZSA6IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1ZXJpZXMoKS5rZXlzKCkpIHsKKyAg
ICAgICAgaWYgKHN0YXRlbWVudC0+YmluZFRleHQoMSwgdGFibGUpICE9IFNRTElURV9PSykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFVCTElDX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjaGVja0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSBzY2hlbWEgaXMg
bWlzc2luZyB0YWJsZTogJXMiLCB0aGlzLCB0YWJsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBtaXNzaW5nVGFibGVzLmFwcGVuZChTdHJpbmcodGFibGUpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorICAgIGlmIChtaXNzaW5nVGFibGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIHJldHVybiBtaXNz
aW5nVGFibGVzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxl
Rm9yZWlnbktleXMoKQoreworICAgIGF1dG8gZW5hYmxlRm9yZWlnbktleXMgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIlBSQUdNQSBmb3JlaWduX2tleXMgPSBPTiJfcyk7CisgICAgaWYg
KCFlbmFibGVGb3JlaWduS2V5cyB8fCBlbmFibGVGb3JlaWduS2V5cy0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5hYmxlRm9yZWlnbktleXMgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KK30KKworVGFibGVBbmRJbmRleFBhaXIgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgYXV0byBnZXRUYWJsZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9PyBBTkQgdHlw
ZSA9ICd0YWJsZSciX3MpOworICAgIGlmICghZ2V0VGFibGVTdGF0ZW1lbnQpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjdXJyZW50VGFibGVBbmRJbmRleFF1ZXJpZXMgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBpZiAoZ2V0VGFibGVTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkgIT0gU1FMSVRF
X09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0
byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSB0YWJsZSwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgaWYgKGdldFRhYmxlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcyBlcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHRhYmxlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgU3RyaW5nIGNyZWF0ZVRhYmxlUXVlcnkgPSBnZXRUYWJsZVN0YXRlbWVudC0+Y29sdW1u
VGV4dCgwKTsKKworICAgIGF1dG8gZ2V0SW5kZXhTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1l
PT8gQU5EIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAgICBpZiAoIWdldEluZGV4U3RhdGVtZW50KSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVzIFVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoZ2V0SW5kZXhTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIHRhYmxlTmFtZSkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y3VycmVudFRhYmxlQW5kSW5kZXhRdWVyaWVz
IFVuYWJsZSB0byBiaW5kIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBmb3IgdGhlIHRhYmxlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gaW5kZXg7CisgICAg
aWYgKGdldEluZGV4U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBh
dXRvIHJhd0luZGV4ID0gU3RyaW5nKGdldEluZGV4U3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKTsK
KyAgICAgICAgaWYgKCFyYXdJbmRleC5pc0VtcHR5KCkpCisgICAgICAgICAgICBpbmRleCA9IHJh
d0luZGV4OworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcjxTdHJpbmcsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPj4oV1RGTW92ZShjcmVhdGVUYWJsZVF1ZXJ5KSwgV1RGTW92ZShpbmRl
eCkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bmVlZHNVcGRhdGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWEoKQoreworICAgIGF1dG8gY3VycmVudFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiQXR0cmlidXRlZFByaXZhdGVDbGlja01l
YXN1cmVtZW50Il9zKS5maXJzdDsKKworICAgIGlmICghY3VycmVudFNjaGVtYS5pc0VtcHR5KCkg
JiYgY3VycmVudFNjaGVtYSAhPSBjcmVhdGVBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1VuaXF1ZUluZGljZXMoKQorewor
ICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIl9zKTsKKyAg
ICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pc3NpbmdVbmlxdWVJbmRpY2VzIFVu
YWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBpbmRleCBjb3VudCwgZXJyb3IgbWVz
c2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgaWYg
KHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaXNzaW5n
VW5pcXVlSW5kaWNlcyBlcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIGluZGV4IGNv
dW50LCBlcnJvciBtZXNzYWdlOiAlcyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBpZiAoc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkgPCBleHBlY3RlZEluZGV4Q291
bnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWlzc2luZ1JlZmVyZW5jZVRvT2JzZXJ2ZWRE
b21haW5zKCkKK3sKKyAgICAvLyBDaGVjayBhIHRhYmxlIGZvciBhIHJlZmVyZW5jZSB0byBUb3BM
ZXZlbERvbWFpbnMsIGEgc2lnbiBvZiB0aGUgb2xkIHNjaGVtYS4KKyAgICBhdXRvIG9sZFNjaGVt
YSA9IGN1cnJlbnRUYWJsZUFuZEluZGV4UXVlcmllcygiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byJfcykuZmlyc3Q7CisgICAgcmV0dXJuIG5lZWRzTmV3Q3JlYXRlVGFibGVTY2hlbWEob2xkU2No
ZW1hKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om5lZWRzVXBkYXRl
ZFNjaGVtYSgpCit7CisgICAgLy8gVGhlcmUgYXJlIDMgY2FzZXMgd2hlcmUgd2UgZXhwZWN0IHBv
dGVudGlhbCBzY2hlbWEgY2hhbmdlcyBkdWUgdG8gdXBncmFkZXMuCisgICAgLy8gQWxsIG90aGVy
IHRhYmxlcyBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgc28gd2Ugc2hvdWxkIEFTU0VSVCB0aGF0IHRo
ZXkgYXJlIGNvcnJlY3QuCisgICAgaWYgKG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpIHx8IG5lZWRzVXBkYXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50U2NoZW1hKCkgfHwgbWlz
c2luZ1VuaXF1ZUluZGljZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBVTlVTRURfUEFSQU0odGFibGUpOworICAgICAgICBBU1NFUlQoY3VycmVudFRhYmxlQW5k
SW5kZXhRdWVyaWVzKHRhYmxlKSA9PSBleHBlY3RlZFRhYmxlQW5kSW5kZXhRdWVyaWVzKCkuZ2V0
KHRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgRXhwZWN0
ZWQ8U1FMaXRlU3RhdGVtZW50LCBpbnQ+IGluc2VydERpc3RpbmN0VmFsdWVzSW5UYWJsZVN0YXRl
bWVudChTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgdGFibGUpCit7Cisg
ICAgaWYgKHRhYmxlID09ICJTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIikKKyAgICAgICAg
cmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgU0VMRUNUIHN1YkZyYW1lRG9tYWluSUQsIE1BWChsYXN0VXBkYXRl
ZCksIHRvcEZyYW1lRG9tYWluSUQgRlJPTSBfU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyBH
Uk9VUCBCWSBzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEIl9zKTsKKworICAgIGlm
ICh0YWJsZSA9PSAiU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJl
dHVybiBkYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBNQVgobGFzdFVw
ZGF0ZWQpLCB0b3BGcmFtZURvbWFpbklEIEZST00gX1N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCJfcyk7
CisKKyAgICBpZiAodGFibGUgPT0gIlN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8iKQorICAg
ICAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgTUFYKGxh
c3RVcGRhdGVkKSwgdG9Eb21haW5JRCBGUk9NIF9TdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQiX3MpOworCisgICAgaWYg
KHRhYmxlID09ICJUb3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20iKQorICAgICAgICByZXR1cm4g
ZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiSU5TRVJUIElOVE8gVG9wRnJhbWVMaW5rRGVjb3Jh
dGlvbnNGcm9tIFNFTEVDVCB0b0RvbWFpbklELCBNQVgobGFzdFVwZGF0ZWQpLCBmcm9tRG9tYWlu
SUQgRlJPTSBfVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIEdST1VQIEJZIHRvRG9tYWluSUQs
IGZyb21Eb21haW5JRCJfcyk7CisKKyAgICBpZiAodGFibGUgPT0gIlVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIklOU0VSVCBJTlRPIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IFNF
TEVDVCBzb3VyY2VTaXRlRG9tYWluSUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklELCBzb3VyY2VJ
RCwgTUFYKHRpbWVPZkFkQ2xpY2spLCB0b2tlbiwgc2lnbmF0dXJlLCBrZXlJRCBGUk9NIF9VbmF0
dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBHUk9VUCBCWSBzb3VyY2VTaXRlRG9tYWlu
SUQsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zKTsKKworICAgIGlmICh0YWJsZSA9PSAiQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50IikKKyAgICAgICAgcmV0dXJuIGRhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBJTlRPIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudCBTRUxFQ1Qgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5hdGlvblNpdGVEb21haW5J
RCwgc291cmNlSUQsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEsIHByaW9yaXR5LCBNQVgodGltZU9m
QWRDbGljayksIGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlLCB0b2tlbiwgc2lnbmF0dXJlLCBr
ZXlJRCwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiBGUk9NIF9BdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQgR1JPVVAgQlkgc291cmNlU2l0ZURvbWFpbklELCBkZXN0aW5h
dGlvblNpdGVEb21haW5JRCJfcyk7CisKKyAgICByZXR1cm4gZGF0YWJhc2UucHJlcGFyZVN0YXRl
bWVudFNsb3cobWFrZVN0cmluZygiSU5TRVJUIElOVE8gIiwgdGFibGUsICIgU0VMRUNUIERJU1RJ
TkNUICogRlJPTSBfIiwgdGFibGUpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKCFu
ZWVkc1VwZGF0ZWRTY2hlbWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1
dG8mIHRhYmxlIDogZXhwZWN0ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAg
ICAgICBhdXRvIGFsdGVyVGFibGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1h
a2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlLCAiIFJFTkFNRSBUTyBfIiwgdGFibGUpKTsK
KyAgICAgICAgaWYgKCFhbHRlclRhYmxlIHx8IGFsdGVyVGFibGUtPnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nh
cnkgZmFpbGVkIHRvIHJlbmFtZSB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjcmVh
dGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vz
c2FyeSBmYWlsZWQgdG8gY3JlYXRlIHNjaGVtYSwgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIHRhYmxlIDogZXhwZWN0
ZWRUYWJsZUFuZEluZGV4UXVlcmllcygpLmtleXMoKSkgeworICAgICAgICBhdXRvIG1pZ3JhdGVU
YWJsZURhdGEgPSBpbnNlcnREaXN0aW5jdFZhbHVlc0luVGFibGVTdGF0ZW1lbnQobV9kYXRhYmFz
ZSwgdGFibGUpOworICAgICAgICBpZiAoIW1pZ3JhdGVUYWJsZURhdGEgfHwgbWlncmF0ZVRhYmxl
RGF0YS0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1pZ3JhdGVE
YXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSBmYWlsZWQgdG8gbWlncmF0ZSBzY2hlbWEsIGVycm9y
IG1lc3NhZ2U6ICVzIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZHJvcFRhYmxlUXVlcnkgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkRST1AgVEFCTEUgXyIsIHRhYmxlKSk7CisgICAgICAgIGlm
ICghZHJvcFRhYmxlUXVlcnkgfHwgZHJvcFRhYmxlUXVlcnktPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3VGFibGVzSWZOZWNlc3Nhcnkg
ZmFpbGVkIHRvIGRyb3AgdGVtcG9yYXJ5IHRhYmxlcywgZXJyb3IgbWVzc2FnZTogJXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptaWdyYXRlRGF0YVRvTmV3
VGFibGVzSWZOZWNlc3NhcnkgZmFpbGVkIHRvIGNyZWF0ZSB1bmlxdWUgaW5kaWNlcywgZXJyb3Ig
bWVzc2FnZTogJXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29sdW1uc0ZvclRhYmxlKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFz
ZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJQUkFHTUEgdGFibGVfaW5mbygiLCB0
YWJsZU5hbWUsICIpIikpOworCisgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
ZXRDb2x1bW5zRnJvbVRhYmxlSW5mb1N0YXRlbWVudCBVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1l
bnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0YWJsZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPFN0cmluZz4gY29sdW1uczsKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBhdXRvIG5hbWUgPSBzdGF0ZW1lbnQtPmNvbHVtblRleHQoMSk7
CisgICAgICAgIGNvbHVtbnMuYXBwZW5kKG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBjb2x1
bW5zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0Nv
bHVtbnNUb1RhYmxlKFN0cmluZyYmIHRhYmxlTmFtZSwgY29uc3QgRXhpc3RpbmdDb2x1bW5zJiBl
eGlzdGluZ0NvbHVtbnMsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYgZXhwZWN0ZWRDb2x1bW5zKQor
eworICAgIEFTU0VSVChleGlzdGluZ0NvbHVtbnMuc2l6ZSgpIDw9IGV4cGVjdGVkQ29sdW1ucy5z
aXplKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vz
c2FyeSgpOworCisgICAgZm9yIChhdXRvJiBjb2x1bW4gOiBleHBlY3RlZENvbHVtbnMpIHsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nQ29sdW1ucy5jb250YWlucyhjb2x1bW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVT
dGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIkFMVEVSIFRBQkxFICIsIHRhYmxlTmFtZSwgIiBBREQg
Q09MVU1OICIsIGNvbHVtbikpOworICAgICAgICBpZiAoIXN0YXRlbWVudCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUgVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVt
ZW50IHRvIGFkZCBtaXNzaW5nIGNvbHVtbnMgdG8gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlIGVycm9yIGV4ZWN1dGluZyBz
dGF0ZW1lbnQgdG8gYWRkIG1pc3NpbmcgY29sdW1ucyB0byB0YWJsZSwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc0lmTmVjZXNzYXJ5
KCkKK3sKKyAgICBjb25zdCBhdXRvIHVuYXR0cmlidXRlZFRhYmxlTmFtZSA9ICJVbmF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfczsKKyAgICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRU
YWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50Il9zOworCisgICAg
YWRkTWlzc2luZ0NvbHVtbnNUb1RhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSwgY29sdW1uc0Zv
clRhYmxlKHVuYXR0cmlidXRlZFRhYmxlTmFtZSksIGV4cGVjdGVkVW5hdHRyaWJ1dGVkQ29sdW1u
cygpKTsKKyAgICBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwg
Y29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJsZU5hbWUpLCBleHBlY3RlZEF0dHJpYnV0ZWRD
b2x1bW5zKCkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1l
Q29sdW1uSW5UYWJsZShTdHJpbmcmJiB0YWJsZU5hbWUsIEV4aXN0aW5nQ29sdW1uTmFtZSYmIGV4
aXN0aW5nQ29sdW1uTmFtZSwgRXhwZWN0ZWRDb2x1bW5OYW1lJiYgZXhwZWN0ZWRDb2x1bW5OYW1l
KQoreworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJBTFRFUiBUQUJMRSAiLCB0YWJsZU5hbWUsICIgUkVOQU1FIENPTFVNTiAi
LCBleGlzdGluZ0NvbHVtbk5hbWUsICIgVE8gIiwgZXhwZWN0ZWRDb2x1bW5OYW1lKSk7CisgICAg
aWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUg
VW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmFkZE1pc3NpbmdDb2x1bW5zVG9UYWJsZSBlcnJvciBleGVjdXRpbmcgc3Rh
dGVtZW50IHRvIHJlbmFtZSBjb2x1bW4gaW4gdGFibGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCkK
K3sKKyAgICAvLyBBdHRyaWJ1dGVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgY2FzZS4KKyAg
ICBjb25zdCBhdXRvIGF0dHJpYnV0ZWRUYWJsZU5hbWUgPSAiQXR0cmlidXRlZFByaXZhdGVDbGlj
a01lYXN1cmVtZW50Il9zOworICAgIGNvbnN0IGF1dG8gb2xkRWFybGllc3RUaW1lVG9TZW5kQ29s
dW1uID0gImVhcmxpZXN0VGltZVRvU2VuZCJfczsKKyAgICBjb25zdCBhdXRvIG5ld0VhcmxpZXN0
VGltZVRvU2VuZENvbHVtbiA9ICJlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJjZSJfczsKKyAgICBj
b25zdCBhdXRvIG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4gPSAiYXR0cmlidXRlT25T
aXRlRG9tYWluSUQiX3M7CisgICAgY29uc3QgYXV0byBuZXdBdHRyaWJ1dGlvbkRlc3RpbmF0aW9u
Q29sdW1uID0gImRlc3RpbmF0aW9uU2l0ZURvbWFpbklEIl9zOworICAgIGNvbnN0IGF1dG8gZm91
bmRBdHRyaWJ1dGVkVGFibGVDb2x1bW5zID0gY29sdW1uc0ZvclRhYmxlKGF0dHJpYnV0ZWRUYWJs
ZU5hbWUpOworCisgICAgaWYgKGZvdW5kQXR0cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhv
bGRFYXJsaWVzdFRpbWVUb1NlbmRDb2x1bW4pKQorICAgICAgICByZW5hbWVDb2x1bW5JblRhYmxl
KGF0dHJpYnV0ZWRUYWJsZU5hbWUsIG9sZEVhcmxpZXN0VGltZVRvU2VuZENvbHVtbiwgbmV3RWFy
bGllc3RUaW1lVG9TZW5kQ29sdW1uKTsKKworICAgIGlmIChmb3VuZEF0dHJpYnV0ZWRUYWJsZUNv
bHVtbnMuY29udGFpbnMob2xkQXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbikpCisgICAgICAg
IHJlbmFtZUNvbHVtbkluVGFibGUoYXR0cmlidXRlZFRhYmxlTmFtZSwgb2xkQXR0cmlidXRpb25E
ZXN0aW5hdGlvbkNvbHVtbiwgbmV3QXR0cmlidXRpb25EZXN0aW5hdGlvbkNvbHVtbik7CisKKyAg
ICAvLyBVbmF0dHJpYnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudCBjYXNlLgorICAgIGF1
dG8gdW5hdHRyaWJ1dGVkVGFibGVOYW1lID0gIlVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50Il9zOworICAgIGF1dG8gZm91bmRVbmF0dHJpYnV0ZWRUYWJsZUNvbHVtbnMgPSBjb2x1
bW5zRm9yVGFibGUodW5hdHRyaWJ1dGVkVGFibGVOYW1lKTsKKworICAgIGlmIChmb3VuZFVuYXR0
cmlidXRlZFRhYmxlQ29sdW1ucy5jb250YWlucyhvbGRBdHRyaWJ1dGlvbkRlc3RpbmF0aW9uQ29s
dW1uKSkKKyAgICAgICAgcmVuYW1lQ29sdW1uSW5UYWJsZSh1bmF0dHJpYnV0ZWRUYWJsZU5hbWUs
IG9sZEF0dHJpYnV0aW9uRGVzdGluYXRpb25Db2x1bW4sIG5ld0F0dHJpYnV0aW9uRGVzdGluYXRp
b25Db2x1bW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWRkTWlz
c2luZ1RhYmxlc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBhdXRvIG1pc3NpbmdUYWJsZXMgPSBjaGVj
a0Zvck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOworICAgIGlmICghbWlzc2luZ1RhYmxlcykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgZm9yIChhdXRvJiB0YWJsZSA6ICptaXNzaW5nVGFibGVzKSB7
CisgICAgICAgIGF1dG8gY3JlYXRlVGFibGVRdWVyeSA9IGV4cGVjdGVkVGFibGVBbmRJbmRleFF1
ZXJpZXMoKS5nZXQodGFibGUpLmZpcnN0OworICAgICAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmRTbG93KGNyZWF0ZVRhYmxlUXVlcnkpKQorICAgICAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNz
aW5nVGFibGVzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgfQorCisgICAg
aWYgKCFjcmVhdGVVbmlxdWVJbmRpY2VzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZGRNaXNzaW5nVGFi
bGVzIGZhaWxlZCB0byBjcmVhdGUgdW5pcXVlIGluZGljZXMsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6b3BlbkFuZFVwZGF0ZVNjaGVtYUlmTmVj
ZXNzYXJ5KCkKK3sKKyAgICBvcGVuSVRQRGF0YWJhc2UoKTsKKyAgICBhZGRNaXNzaW5nVGFibGVz
SWZOZWNlc3NhcnkoKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgT2JzZXJ2ZWQgRG9tYWlucyB0
YWJsZS4KKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnQoIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdP
YnNlcnZlZERvbWFpbnMnIl9zKTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQpIHsKKyAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVt
YSBmb3IgdGhlIE9ic2VydmVkRG9tYWlucyB0YWJsZS4iKTsKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gT2JzZXJ2ZWREb21haW5zIHRhYmxlIGF0IGFsbCwgb3IgdGhlcmUg
aXMgYW4gZXJyb3IgZXhlY3V0aW5nIHRoZSBmZXRjaCwgZGVsZXRlIHRoZSBmaWxlLgorICAgICAg
ICBpZiAoc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhl
IE9ic2VydmVkIERvbWFpbnMgdGFibGUuIik7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKyAg
ICAgICAgICAgIG9wZW5JVFBEYXRhYmFzZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKTsK
KyAgICB9CisKKyAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgpKTsKKworICAgIC8v
IElmIHRoZSBPYnNlcnZlZERvbWFpbnMgc2NoZW1hIGluIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIGRpcmVjdG9yeSBpcyBub3QgdGhlIGN1cnJlbnQgc2NoZW1hLCBkZWxldGUgdGhlIGRhdGFi
YXNlIGZpbGUuCisgICAgLy8gRklYTUU6IE1pZ3JhdGUgb2xkIE9ic2VydmVkRG9tYWlucyBkYXRh
IHRvIG5ldyB0YWJsZSBzY2hlbWEuCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWRE
b21haW5zVGFibGVTY2hlbWFWMSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gT2JzZXJ2ZWREb21haW5z
VGFibGVTY2hlbWFWMUFsdGVybmF0ZSgpKSB7CisgICAgICAgIGNsb3NlKCk7CisgICAgICAgIEZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisgICAgICAgIG9w
ZW5JVFBEYXRhYmFzZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gUmVuYW1p
bmcgYW5kIGFkZGluZyBjb2x1bW5zIHNob3VsZCBiZSBkb25lIGJlZm9yZSBtaWdyYXRpbmcgdG8g
YXZvaWQgbWlzbWF0Y2hlZCBvciBtaXNzaW5nIGNvbHVtbnMuCisgICAgcmVuYW1lQ29sdW1uc0lm
TmVjZXNzYXJ5KCk7CisgICAgYWRkTWlzc2luZ0NvbHVtbnNJZk5lY2Vzc2FyeSgpOworICAgIG1p
Z3JhdGVEYXRhVG9OZXdUYWJsZXNJZk5lY2Vzc2FyeSgpOworfQorCitTUUxpdGVTdGF0ZW1lbnRB
dXRvUmVzZXRTY29wZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjb3BlZFN0YXRlbWVu
dChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiYgc3RhdGVtZW50LCBB
U0NJSUxpdGVyYWwgcXVlcnksIGNvbnN0IFN0cmluZyYgbG9nU3RyaW5nKSBjb25zdAoreworICAg
IGlmICghc3RhdGVtZW50KSB7CisgICAgICAgIGF1dG8gc3RhdGVtZW50T3JFcnJvciA9IG1fZGF0
YWJhc2UucHJlcGFyZUhlYXBTdGF0ZW1lbnQocXVlcnkpOworICAgICAgICBpZiAoIXN0YXRlbWVu
dE9yRXJyb3IpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6JXMgZmFpbGVkIHRvIHByZXBhcmUgc3RhdGVt
ZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgdGhpcywgbG9nU3RyaW5n
LmFzY2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVu
dEF1dG9SZXNldFNjb3BlIHsgfTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0
ZW1lbnRPckVycm9yLnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CisgICAgICAgIEFTU0VSVCht
X2RhdGFiYXNlLmlzT3BlbigpKTsKKyAgICB9CisgICAgcmV0dXJuIFNRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlIHsgc3RhdGVtZW50LmdldCgpIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnRlcnJ1cHQoKQoreworICAgIGlmIChtX2RhdGFiYXNlLmlzT3Bl
bigpKQorICAgICAgICBtX2RhdGFiYXNlLmludGVycnVwdCgpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERv
bWFpbkNvdW50UXVlcnksICJpc0VtcHR5Il9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNFbXB0eSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuICFzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNyZWF0ZVVuaXF1ZUluZGljZXMoKQoreworICAgIGlmICgh
bV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICB8
fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpCisgICAgICAgIHx8
ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSkKKyAgICAgICAgfHwg
IW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhUb3BGcmFtZUxvYWRl
ZFRoaXJkUGFydHlTY3JpcHRzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmlxdWVJbmRleFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAg
IHx8ICFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVVuaXF1ZUluZGV4U3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0ZUNv
bW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgfHwgIW1fZGF0YWJhc2UuZXhlY3V0
ZUNvbW1hbmQoY3JlYXRlVW5pcXVlSW5kZXhTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
KQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRl
eE9wZXJhdGluZ0RhdGVzKQorICAgICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChj
cmVhdGVVbmlxdWVJbmRleFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KQorICAg
ICAgICB8fCAhbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVVbmlxdWVJbmRleEF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGVVbmlx
dWVJbmRpY2VzIGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZU9i
c2VydmVkRG9tYWluKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2Jz
ZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRv
cExldmVsRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRv
cExldmVsRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRl
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1l
TGlua0RlY29yYXRpb25zRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIFRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
ZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVMb2FkZWRUaGlyZFBhcnR5U2NyaXB0cykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lTG9hZGVkVGhpcmRQ
YXJ0eVNjcmlwdHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZVN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNy
ZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pKSB7CisgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFt
X2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlT3BlcmF0aW5nRGF0ZXMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBPcGVyYXRpbmdEYXRlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFu
ZChjcmVhdGVVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1
cmVtZW50IHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9y
KCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZUF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghY3Jl
YXRlVW5pcXVlSW5kaWNlcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlc3Ryb3lTdGF0
ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQgPSBu
dWxscHRyOworICAgIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzU3RhdGVtZW50
ID0gbnVsbHB0cjsKKyAgICBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsK
KyAgICBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBt
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fdXBkYXRlVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2lzVmVyeVByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50ID0gbnVsbHB0cjsKKyAgICBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQgPSBudWxs
cHRyOworICAgIG1fdG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50ID0g
bnVsbHB0cjsKKyAgICBtX3RvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHNFeGlzdHNTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fY291bnRQcmV2YWxlbnRSZXNvdXJjZXNXaXRoVXNlckludGVyYWN0
aW9uU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX2NvdW50UHJldmFsZW50UmVzb3VyY2VzV2l0
aG91dFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9nZXRSZXNvdXJj
ZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0
ZW1lbnQgPSBudWxscHRyOworICAgIG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAg
ICBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBTdGF0ZW1lbnQgPSBudWxscHRyOwor
ICAgIG1fbGlua0RlY29yYXRpb25FeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fc2Ny
aXB0TG9hZEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJGcmFtZUV4aXN0c1N0
YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudCA9IG51
bGxwdHI7CisgICAgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9vYnNlcnZlZERvbWFpbnNFeGlzdHNTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlQWxsRGF0YVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9pbnNlcnRB
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQgPSBudWxscHRyOworICAg
IG1fc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRTdGF0ZW1l
bnQgPSBudWxscHRyOworICAgIG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckF0dHJpYnV0ZWRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9jbGVhckV4cGlyZWRQcml2
YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9hbGxVbmF0dHJp
YnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudCA9IG51bGxw
dHI7CisgICAgbV9hbGxBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQg
PSBudWxscHRyOworICAgIG1fZmluZFVuYXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7Cisg
ICAgbV9maW5kQXR0cmlidXRlZFN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV91cGRhdGVBdHRy
aWJ1dGlvbnNFYXJsaWVzdFRpbWVUb1NlbmRTdGF0ZW1lbnQgPSBudWxscHRyOworICAgIG1fcmVt
b3ZlVW5hdHRyaWJ1dGVkU3RhdGVtZW50ID0gbnVsbHB0cjsKKyAgICBtX21hcmtSZXBvcnRBc1Nl
bnRUb1NvdXJjZVN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9tYXJrUmVwb3J0QXNTZW50VG9E
ZXN0aW5hdGlvblN0YXRlbWVudCA9IG51bGxwdHI7CisgICAgbV9lYXJsaWVzdFRpbWVzVG9TZW5k
U3RhdGVtZW50ID0gbnVsbHB0cjsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxv
YWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKGRvbWFpbklEKGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiBkb21h
aW5zIG5vdCBpbiB0aGUgZGF0YWJhc2UuIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQs
IGluc2VydE9ic2VydmVkRG9tYWluUXVlcnksICJpbnNlcnRPYnNlcnZlZERvbWFpbiJfcyk7Cisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
VGV4dChSZWdpc3RyYWJsZURvbWFpbkluZGV4LCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+
YmluZERvdWJsZShMYXN0U2VlbkluZGV4LCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRz
U2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLmhh
ZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZERvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4LCBsb2FkU3Rh
dGlzdGljcy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJ
bnQoR3JhbmRmYXRoZXJlZEluZGV4LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KElzUHJldmFsZW50
SW5kZXgsIGxvYWRTdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgs
IGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KERhdGFSZWNvcmRzUmVtb3ZlZEluZGV4
LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVjb3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvVXNlckludGVyYWN0aW9uSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNj
b3BlZFN0YXRlbWVudC0+YmluZEludChUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJSW5kZXgsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRT
dGF0ZW1lbnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbElu
ZGV4LCBsb2FkU3RhdGlzdGljcy5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJj
ZSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRPYnNlcnZlZERv
bWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5H
LCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoc2NvcGVk
U3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbGF0
aW9uc2hpcEV4aXN0cyhTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSYgc3RhdGVtZW50LCBz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdAoreworICAgIGlmICghZmlyc3REb21haW5JRCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDEs
ICpmaXJzdERvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
VGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xP
R19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWxhdGlvbnNoaXBFeGlzdHMgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiAhIXN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitzdGQ6Om9wdGlvbmFsPHVu
c2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudCwgZG9tYWluSURGcm9tU3RyaW5nUXVlcnks
ICJkb21haW5JRCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQgfHwgc2NvcGVkU3RhdGVt
ZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZC4gRXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgcmV0dXJuIHNjb3Bl
ZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjplbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWluTGlzdCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChhdXRvJiB0b3BGcmFtZVJlc291cmNlIDogZG9tYWluTGlzdCkgeworICAgICAgICAv
LyBJbnNlcnQgcXVlcnkgd2lsbCBmYWlsIGlmIHRvcCBmcmFtZSBkb21haW4gaXMgbm90IGFscmVh
ZHkgaW4gdGhlIGRhdGFiYXNlCisgICAgICAgIGlmIChlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZVJlc291cmNlKS5zZWNvbmQpCisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgJyInLCB0b3BG
cmFtZVJlc291cmNlLnN0cmluZygpLCAnIicpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50
b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbkxpc3QsIHVuc2lnbmVkIGRvbWFpbklEKQor
eworICAgIGF1dG8gaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVw
YXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKHN0YXRlbWVudCwgZW5zdXJlQW5kTWFrZURvbWFp
bkxpc3QoZG9tYWluTGlzdCksICIgKTsiKSk7CisgICAgCisgICAgaWYgKCFpbnNlcnRSZWxhdGlv
bnNoaXBTdGF0ZW1lbnQKKyAgICAgICAgfHwgaW5zZXJ0UmVsYXRpb25zaGlwU3RhdGVtZW50LT5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoc3RhdGVtZW50LmNvbnRhaW5zKCJSRVBMQUNFIikpIHsKKyAg
ICAgICAgaWYgKGluc2VydFJlbGF0aW9uc2hpcFN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBXYWxs
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spIHsK
KyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluc2VydFJl
bGF0aW9uc2hpcFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0IGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJl
Z2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURv
bWFpbik7CisgICAgCisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFpbklEKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnksIGxv
YWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWlu
SUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50UXVlcnksIGxvYWRT
dGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7CisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSwgbG9hZFN0
YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklE
LnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5LCBs
b2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJs
ZURvbWFpbklELnZhbHVlKCkpOworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELnZhbHVlKCkpOworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
UXVlcnksIGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVn
aXN0cmFibGVEb21haW5JRC52YWx1ZSgpKTsKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KHRvcEZyYW1lTGlua0RlY29yYXRpb25zRnJvbVF1ZXJ5LCBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZUxpbmtEZWNvcmF0aW9uc0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzUXVlcnksIGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlw
dHMsIHJlZ2lzdHJhYmxlRG9tYWluSUQudmFsdWUoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJlbnQs
IGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFu
c2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGN1cnJlbnRSZWdpc3RyYWJsZURvbWFp
biA9IGN1cnJlbnQtPmNvbHVtblRleHQoUmVnaXN0cmFibGVEb21haW5JbmRleCk7CisgICAgYXV0
byBjdXJyZW50TGFzdFNlZW4gPSBjdXJyZW50LT5jb2x1bW5Eb3VibGUoTGFzdFNlZW5JbmRleCk7
CisgICAgYXV0byBjdXJyZW50TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvbiA9IGN1cnJlbnQtPmNv
bHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUluZGV4KTsKKyAgICBib29s
IGN1cnJlbnRHcmFuZGZhdGhlcmVkID0gY3VycmVudC0+Y29sdW1uSW50KEdyYW5kZmF0aGVyZWRJ
bmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNQcmV2YWxlbnQgPSBjdXJyZW50LT5jb2x1bW5JbnQo
SXNQcmV2YWxlbnRJbmRleCk7CisgICAgYm9vbCBjdXJyZW50SXNWZXJ5UHJldmFsZW50ID0gY3Vy
cmVudC0+Y29sdW1uSW50KElzVmVyeVByZXZhbGVudEluZGV4KTsKKyAgICB1bnNpZ25lZCBjdXJy
ZW50RGF0YVJlY29yZHNSZW1vdmVkID0gY3VycmVudC0+Y29sdW1uSW50KERhdGFSZWNvcmRzUmVt
b3ZlZEluZGV4KTsKKyAgICBib29sIGN1cnJlbnRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURh
dGFSZW1vdmFsID0gY3VycmVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2ll
RGF0YVJlbW92YWxJbmRleCk7CisKKyAgICBBU1NFUlQoY3VycmVudFJlZ2lzdHJhYmxlRG9tYWlu
ID09IG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKTsKKworICAgIGlmIChXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoY3VycmVudExhc3RTZWVuKSA8IG90aGVyLmxhc3RTZWVuKQorICAg
ICAgICB1cGRhdGVMYXN0U2VlbihvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgb3RoZXIubGFzdFNl
ZW4pOworCisgICAgaWYgKCFvdGhlci5oYWRVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgLy8g
SWYgbW9zdCByZWNlbnQgdXNlciBpbnRlcmFjdGlvbiB0aW1lIGhhcyBiZWVuIHJlc2V0IGRvIHNv
IGhlcmUgdG9vLgorICAgICAgICBpZiAoIW90aGVyLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKQorICAgICAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKG90aGVyLnJlZ2lzdHJhYmxlRG9t
YWluLCBmYWxzZSwgeyB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2V0VXNlckludGVyYWN0aW9u
KG90aGVyLnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlLCBzdGQ6Om1heChXYWxsVGltZTo6ZnJvbVJh
d1NlY29uZHMoY3VycmVudE1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb24pLCBvdGhlci5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkpOworCisgICAgaWYgKG90aGVyLmdyYW5kZmF0aGVyZWQg
JiYgIWN1cnJlbnRHcmFuZGZhdGhlcmVkKQorICAgICAgICBzZXRHcmFuZGZhdGhlcmVkKG90aGVy
LnJlZ2lzdHJhYmxlRG9tYWluLCB0cnVlKTsKKyAgICBpZiAob3RoZXIuaXNQcmV2YWxlbnRSZXNv
dXJjZSAmJiAhY3VycmVudElzUHJldmFsZW50KQorICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShvdGhlci5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgaWYgKG90aGVyLmlzVmVyeVByZXZhbGVu
dFJlc291cmNlICYmICFjdXJyZW50SXNWZXJ5UHJldmFsZW50KQorICAgICAgICBzZXRWZXJ5UHJl
dmFsZW50UmVzb3VyY2Uob3RoZXIucmVnaXN0cmFibGVEb21haW4pOworICAgIGlmIChvdGhlci5k
YXRhUmVjb3Jkc1JlbW92ZWQgPiBjdXJyZW50RGF0YVJlY29yZHNSZW1vdmVkKQorICAgICAgICB1
cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWQob3RoZXIucmVnaXN0cmFibGVEb21haW4sIG90aGVyLmRh
dGFSZWNvcmRzUmVtb3ZlZCk7CisgICAgaWYgKG90aGVyLmdvdExpbmtEZWNvcmF0aW9uRnJvbVBy
ZXZhbGVudFJlc291cmNlICYmICFjdXJyZW50SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRh
UmVtb3ZhbCkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3Zh
bChvdGhlci5yZWdpc3RyYWJsZURvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpYyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBzdGF0aXN0aWMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsK
KyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJl
c291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5O
YW1lUXVlcnksICJtZXJnZVN0YXRpc3RpYyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQK
KyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJn
ZVN0YXRpc3RpYy4gU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kIG9yIGRvbWFpbiB3YXMgbm90IGZv
dW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1lcmdlKHNjb3BlZFN0YXRlbWVudC5nZXQoKSwgc3Rh
dGlzdGljKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlU3Rh
dGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJiBzdGF0aXN0aWNzKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlmIChzdGF0aXN0aWNzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVn
aW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6
IHN0YXRpc3RpY3MpIHsKKyAgICAgICAgaWYgKCFkb21haW5JRChzdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4pKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9t
YWluKHN0YXRpc3RpYyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptZXJnZVN0YXRpc3RpY3MgaW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFp
bGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRo
aXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtZXJnZVN0YXRpc3RpYyhzdGF0aXN0aWMpOworICAg
IH0KKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcy4KKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3MpCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljKTsKK30KKworc3RhdGljIEFT
Q0lJTGl0ZXJhbCBqb2luU3ViU3RhdGlzdGljc0ZvclNvcnRpbmcoKQoreworICAgIHJldHVybiAi
U0VMRUNUIGRvbWFpbklELCIKKyAgICAgICAgIihjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSAr
IGNvdW50U3ViUmVzb3VyY2VVbmRlclRvcEZyYW1lICsgY291bnRVbmlxdWVSZWRpcmVjdFRvKSBh
cyBzdW0gICIKKyAgICAgICAgIkZST00gKCAiCisgICAgICAgICJTRUxFQ1QgIgorICAgICAgICAg
ICAgImRvbWFpbklELCAiCisgICAgICAgICAgICAiQ09VTlQoRElTVElOQ1QgZi50b3BGcmFtZURv
bWFpbklEKSBhcyBjb3VudFN1YkZyYW1lVW5kZXJUb3BGcmFtZSwgIgorICAgICAgICAgICAgIkNP
VU5UKERJU1RJTkNUIHIudG9wRnJhbWVEb21haW5JRCkgYXMgY291bnRTdWJSZXNvdXJjZVVuZGVy
VG9wRnJhbWUsICIKKyAgICAgICAgICAgICJDT1VOVChESVNUSU5DVCB0b0RvbWFpbklEKSBhcyBj
b3VudFVuaXF1ZVJlZGlyZWN0VG8gIgorICAgICAgICAiRlJPTSAiCisgICAgICAgICJPYnNlcnZl
ZERvbWFpbnMgbyAiCisgICAgICAgICJMRUZUIEpPSU4gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWlucyBmIE9OIG8uZG9tYWluSUQgPSBmLnN1YkZyYW1lRG9tYWluSUQgIgorICAgICAgICAiTEVG
VCBKT0lOIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgciBPTiBvLmRvbWFpbklEID0g
ci5zdWJyZXNvdXJjZURvbWFpbklEICIKKyAgICAgICAgIkxFRlQgSk9JTiBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvIHUgT04gby5kb21haW5JRCA9IHUuc3VicmVzb3VyY2VEb21haW5JRCAi
CisgICAgICAgICJXSEVSRSBpc1ByZXZhbGVudCBMSUtFID8gIgorICAgICAgICAiYW5kIGhhZFVz
ZXJJbnRlcmFjdGlvbiBMSUtFID8gIgorICAgICAgICAiR1JPVVAgQlkgZG9tYWluSUQpIE9SREVS
IEJZIHN1bSBERVNDOyJfczsKK30KKworVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHk+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zKHVuc2lnbmVkIHRoaXJkUGFydHlEb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRoaXJkUGFydHlEb21haW4pIGNvbnN0Cit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRBbGxTdWJTdGF0aXN0aWNzU3RhdGVtZW50LCBnZXRB
bGxTdWJTdGF0aXN0aWNzVW5kZXJEb21haW5RdWVyeSwgImdldFRoaXJkUGFydHlEYXRhRm9yU3Bl
Y2lmaWNGaXJzdFBhcnR5RG9tYWlucyJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAg
ICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHRoaXJkUGFydHlEb21haW5JRCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCB0aGly
ZFBhcnR5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdGhpcmRQYXJ0eURvbWFpbklEKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4sIGVycm9yIG1lc3Nh
Z2U6ICUiIFBVQkxJQ19MT0dfU1RSSU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIFZlY3RvcjxXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5
PiB0aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnM7CisgICAgd2hpbGUg
KHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgUmVnaXN0
cmFibGVEb21haW4gZmlyc3RQYXJ0eURvbWFpbiA9IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoZ2V0RG9tYWluU3RyaW5nRnJvbURv
bWFpbklEKG1fZ2V0QWxsU3ViU3RhdGlzdGljc1N0YXRlbWVudC0+Y29sdW1uSW50KDApKSk7Cisg
ICAgICAgIHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucy5hcHBlbmRJ
Zk5vdENvbnRhaW5zKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGFGb3JTcGVjaWZpY0ZpcnN0UGFydHkgeyBmaXJzdFBhcnR5RG9tYWluLCBoYXNTdG9yYWdlQWNj
ZXNzKGZpcnN0UGFydHlEb21haW4sIHRoaXJkUGFydHlEb21haW4pLCBnZXRNb3N0UmVjZW50bHlV
cGRhdGVkVGltZXN0YW1wKHRoaXJkUGFydHlEb21haW4sIGZpcnN0UGFydHlEb21haW4pIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21h
aW5zOworfQorCitzdGF0aWMgYm9vbCBoYXNCZWVuVGhpcmRQYXJ0eSh1bnNpZ25lZCB0aW1lc1Vu
ZGVyRmlyc3RQYXJ0eSkKK3sKKyAgICByZXR1cm4gdGltZXNVbmRlckZpcnN0UGFydHkgPiAwOwor
fQorCitWZWN0b3I8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0
YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphZ2dyZWdhdGVkVGhpcmRQYXJ0eURhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IHRoaXJkUGFy
dHlEYXRhTGlzdDsKKyAgICBjb25zdCBhdXRvIHByZXZhbGVudERvbWFpbnNCaW5kUGFyYW1ldGVy
ID0gdGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZSgpID09IFRoaXJkUGFydHlDb29raWVCbG9j
a2luZ01vZGU6OkFsbCA/ICIlIiA6ICIxIjsKKyAgICBhdXRvIHNvcnRlZFN0YXRpc3RpY3MgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoam9pblN1YlN0YXRpc3RpY3NGb3JTb3J0aW5nKCkp
OworICAgIGlmICghc29ydGVkU3RhdGlzdGljcworICAgICAgICB8fCBzb3J0ZWRTdGF0aXN0aWNz
LT5iaW5kVGV4dCgxLCBwcmV2YWxlbnREb21haW5zQmluZFBhcmFtZXRlcikKKyAgICAgICAgfHwg
c29ydGVkU3RhdGlzdGljcy0+YmluZFRleHQoMiwgIiUiKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6YWdncmVnYXRlZFRoaXJkUGFydHlEYXRhLCBlcnJvciBtZXNzYWdlOiAlIiBQVUJMSUNfTE9H
X1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdGhpcmRQYXJ0eURhdGFMaXN0OworICAgIH0KKyAg
ICB3aGlsZSAoc29ydGVkU3RhdGlzdGljcy0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgaWYgKGhhc0JlZW5UaGlyZFBhcnR5KHNvcnRlZFN0YXRpc3RpY3MtPmNvbHVtbkludCgxKSkp
IHsKKyAgICAgICAgICAgIGF1dG8gdGhpcmRQYXJ0eURvbWFpbklEID0gc29ydGVkU3RhdGlzdGlj
cy0+Y29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byB0aGlyZFBhcnR5RG9tYWluID0gUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhnZXREb21haW5TdHJpbmdGcm9tRG9tYWluSUQodGhpcmRQYXJ0eURvbWFpbklEKSk7CisgICAg
ICAgICAgICB0aGlyZFBhcnR5RGF0YUxpc3QuYXBwZW5kKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6VGhpcmRQYXJ0eURhdGEgeyB0aGlyZFBhcnR5RG9tYWluLCBnZXRUaGlyZFBhcnR5
RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbnModGhpcmRQYXJ0eURvbWFpbklELCB0aGly
ZFBhcnR5RG9tYWluKSB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdGhpcmRQYXJ0
eURhdGFMaXN0OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jcmVt
ZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFp
bj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1l
bnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRz
UmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGJ1aWxkTGlzdChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKCFkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21h
aW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1
bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJl
ZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJIaXQgJXUgcmVj
dXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJuaW5nIGVhcmx5LiIsIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAorICAgICsrbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxsczsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlmaWVkRG9t
YWluczsKKyAgICBhdXRvIGZpbmRTdWJyZXNvdXJjZXMgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklE
IGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFN1YnJl
c291cmNlcyB8fCBmaW5kU3VicmVzb3VyY2VzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLT5j
b2x1bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRS
ZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQo
bmV3RG9tYWluSUQpOworICAgIH0KKworICAgIGF1dG8gZmluZFRvcEZyYW1lcyA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5m
cm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBP
YnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5E
IE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiX3MpOworICAgIGlmICghZmluZFRvcEZy
YW1lcworICAgICAgICB8fCBmaW5kVG9wRnJhbWVzLT5iaW5kSW50KDEsIHByaW1hcnlEb21haW5J
RCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWN1cnNpdmVseUZpbmRO
b25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4gZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLT5jb2x1
bW5JbnQoMCk7CisgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJl
Y3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIGlmIChpbnNlcnRSZXN1
bHQuc2Vjb25kKQorICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3
RG9tYWluSUQpOworICAgIH0KKworICAgIGlmIChuZXdseUlkZW50aWZpZWREb21haW5zLmVtcHR5
KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgZm9yIChh
dXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykKKyAgICAgICAgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVk
aXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJldHVybiBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0OworICAgIGF1dG8gc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJh
c2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0g
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFp
bnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRl
bWVudCkgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmlu
c2VydChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAgIH0K
KworICAgIGF1dG8gdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFy
ZVN0YXRlbWVudCgiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291
cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7
CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHRv
cEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAg
ICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVu
dC0+Y29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBhdXRvIG1hcmtQcmV2YWxlbnRTdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
YnVpbGRMaXN0KHByZXZhbGVudER1ZVRvUmVkaXJlY3QpLCAiKSIpKTsKKyAgICBpZiAoIW1hcmtQ
cmV2YWxlbnRTdGF0ZW1lbnQgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitIYXNoTWFwPHVuc2lnbmVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDx1
bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBhdXRvIG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlm
IChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KSB7CisgICAgICAgIHdoaWxlIChu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAg
ICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSkKKyAg
ICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQtPmNvbHVt
bkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpMb3cgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklE
c09mSW50ZXJlc3QgPSBidWlsZExpc3QocmVzdWx0cy5rZXlzKCkpOworCisgICAgYXV0byBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmICghZG9tYWluSUQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc1N0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50ID0g
bV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50
ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudCkgeworICAgICAgICB3aGlsZSAo
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1
bW5JbnQoMCkpOworICAgICAgICAgICAgQVNTRVJUKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
ICghZG9tYWluSUQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmco
IlNFTEVDVCBzdWJmcmFtZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViZnJhbWVEb21haW5JRCBJTiAoIiwg
ZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3ViZnJhbWVEb21haW5JRCIpKTsKKyAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50KSB7CisgICAg
ICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0
ZW1lbnQtPmNvbHVtbkludCgwKSk7CisgICAgICAgICAgICBBU1NFUlQoZG9tYWluSUQpOworICAg
ICAgICAgICAgaWYgKCFkb21haW5JRCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAg
IGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQtPmNvbHVtbklu
dCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudFNsb3cobWFr
ZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQpIHsKKyAgICAgICAgd2hpbGUg
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50
KDApKTsKKyAgICAgICAgICAgIEFTU0VSVChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAoIWRv
bWFpbklEKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBy
ZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC0+Y29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcygpCit7CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJ
T04pCisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIG5vdFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZXMgPSBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byB0cmFuc2FjdGlvbiA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNraXAocmVzb3VyY2VTdGF0
aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgYXV0byBuZXdQcmV2YWxlbmNlID0gY2xhc3NpZmllcigpLmNhbGN1bGF0ZVJlc291cmNlUHJl
dmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCBy
ZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNl
U3RhdGlzdGljLnByZXZhbGVuY2UpOworICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSByZXNv
dXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3Vy
Y2UocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOwor
ICAgIH0KKyNlbmRpZgorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xh
c3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIG1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgcmVjbGFzc2lm
eVJlc291cmNlcygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cnVu
SW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBtX2RhdGFiYXNlLnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFN1YkZyYW1lRG9tYWluJiBz
dWJGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMt
PnNjb3BlZFN0YXRlbWVudChtX3N0b3JhZ2VBY2Nlc3NFeGlzdHNTdGF0ZW1lbnQsIHN0b3JhZ2VB
Y2Nlc3NFeGlzdHNRdWVyeSwgImhhc1N0b3JhZ2VBY2Nlc3MiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFpbiks
IHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIHN0ZDo6b3B0aW9uYWw8RnJhbWVJ
ZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJlc3Vs
dC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3Mgd2FzIG5v
dCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoIChjb29raWVBY2Nlc3Moc3ViRnJhbWVEb21h
aW4sIHRvcEZyYW1lRG9tYWluKSkgeworICAgIGNhc2UgQ29va2llQWNjZXNzOjpDYW5ub3RSZXF1
ZXN0OgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeToKKyAgICAgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1YkZyYW1l
RG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBz
dG9yZS0+aGFzQ29va2llcyhzdWJGcmFtZURvbWFpbiwgW3N0b3JlLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6CisgICAgICAgIC8v
IEhhbmRsZWQgYmVsb3cuCisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBzdG9y
ZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0b3JhZ2VBY2Nlc3NTY29wZSBz
Y29wZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNv
bmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIHdhcyBub3Qg
Y29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGNvb2tpZUFjY2VzcyhzdWJGcmFtZURv
bWFpbiwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgY2FzZSBDb29raWVBY2Nlc3M6OkNhbm5vdFJl
cXVlc3Q6CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Cisg
ICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3Jh
Z2UgYWNjZXNzIHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29raWVzIGFy
ZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVk
IHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3Ry
aW5nKCJbSVRQXSBDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVE
b21haW4uc3RyaW5nKCksICInIHNpbmNlIGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJk
LXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24g
YXMgZmlyc3QtcGFydHkuIl9zKSk7CisgICAgICAgIH0KKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeToKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJObyBuZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNz
IHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxv
Y2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4gTm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNv
b2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJsb2NrIHRoaXMgdGhpcmQtcGFydHkgZnJvbSBzZXR0aW5n
IGNvb2tpZXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERl
YnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIE5vIG5lZWQgdG8gZ3Jh
bnQgc3RvcmFnZSBhY2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCksICInIHNp
bmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4g
Tm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNvb2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJsb2NrIHRo
aXMgdGhpcmQtcGFydHkgZnJvbSBzZXR0aW5nIGNvb2tpZXMuIl9zKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llQWNjZXNzOjpPbmx5SWZHcmFudGVkOgor
ICAgICAgICAvLyBIYW5kbGVkIGJlbG93LgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBh
dXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NU
aHJvdWdoUHJvbXB0KCpzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAg
ICBpZiAodXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hv
d246Ok5vKSB7CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiQWJvdXQgdG8gYXNrIHRo
ZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICUiIFBS
SVZBVEVfTE9HX1NUUklORyAiIHVuZGVyICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIG9yIG5vdC4i
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFr
ZVN0cmluZygiW0lUUF0gQWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRv
IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICciX3MsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLCAi
JyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgb3Igbm90LiJfcykpOwor
ICAgICAgICB9CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6
OlJlcXVpcmVzVXNlclByb21wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
dXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Olll
cykgeworICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdhcyBn
cmFudGVkIHRvICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIHVuZGVyICUiIFBSSVZBVEVfTE9HX1NU
UklORyAiLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgZGVidWdCcm9hZGNh
c3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJ
bmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAnIl9z
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwgIicgdW5kZXIgJyJfcywgdG9wRnJhbWVEb21haW4u
c3RyaW5nKCksICInLiJfcykpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFuc2Fj
dGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3Jh
Z2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNz
QVBJICsgMSBXSEVSRSBkb21haW5JRCA9ID8iX3MpOworICAgIGlmICghaW5jcmVtZW50U3RvcmFn
ZUFjY2VzcworICAgICAgICB8fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLT5iaW5kSW50KDEsICpz
dWJGcmFtZVN0YXR1cy5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbmNyZW1lbnRT
dG9yYWdlQWNjZXNzLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1v
dmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxp
ZXIsIHNjb3BlLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0gKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkIHdhc0dyYW50ZWQpIG11dGFibGUgeworICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkID09IFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVk
OjpZZXMgPyBTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MgOiBTdG9yYWdlQWNjZXNzU3Rh
dHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBQYWdl
SWRlbnRpZmllciBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKK3sK
KyAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfSU5GTyhJVFBEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2Ug
YWNjZXNzIHdhcyBncmFudGVkIGZvciAlIiBQUklWQVRFX0xPR19TVFJJTkcgIiB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICUiIFBSSVZBVEVfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIgaW50ZXJhY3Rp
b24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpJ
VFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0
cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRvbWFpbi5zdHJp
bmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iX3Mp
KTsKKyAgICB9CisKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgc3RkOjpudWxs
b3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm8sIFN0b3Jh
Z2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpIHsgfSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nl
c3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BG
cmFtZURvbWFpbiwgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJ
RCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1Nob3duLCBTdG9yYWdlQWNj
ZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dy
YW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklm
TmVjZXNzYXJ5KCk7CisKKyAgICBpZiAocHJvbXB0V2FzU2hvd24gPT0gU3RvcmFnZUFjY2Vzc1By
b21wdFdhc1Nob3duOjpZZXMpIHsKKyAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
KyAgICAgICAgaWYgKCFzdWJGcmFtZVN0YXR1cy5zZWNvbmQpIHsKKyAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3Mgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxl
ZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8p
OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgICAgIGlmICghTmV0d29ya1N0b3JhZ2VTZXNzaW9u
OjpjYW5SZXF1ZXN0U3RvcmFnZUFjY2Vzc0ZvckxvZ2luT3JDb21wYXRpYmlsaXR5UHVycG9zZXNX
aXRob3V0UHJpb3JVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWlu
KSkKKyAgICAgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKSk7CisjZW5kaWYKKyAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0b3BGcmFtZURvbWFpbiB9KSwgKnN1
YkZyYW1lU3RhdHVzLnNlY29uZCk7CisgICAgfQorCisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50
ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBm
cmFtZUlELCBwYWdlSUQsIHByb21wdFdhc1Nob3duLCBzY29wZSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9w
RnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgc3RkOjpvcHRpb25hbDxGcmFtZUlkZW50aWZp
ZXI+IGZyYW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdh
c1Nob3duIHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2Nv
cGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHN1YkZyYW1lRG9tYWluID09IHRvcEZyYW1lRG9tYWluKSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkOjpZZXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHByb21wdFdhc1Nob3duTm93T3JFYXJsaWVyID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7CisgICAgICAgIGF1dG8gdHJhbnNhY3Rpb25T
Y29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICAgICAgaWYgKCFzdWJGcmFtZVN0
YXR1cy5zZWNvbmQpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nl
c3NJbnRlcm5hbCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFkZGVkUmVjb3JkOjpObyk7CisjaWYgQVNTRVJUX0VO
QUJMRUQKKyAgICAgICAgaWYgKCFOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNhblJlcXVlc3RTdG9y
YWdlQWNjZXNzRm9yTG9naW5PckNvbXBhdGliaWxpdHlQdXJwb3Nlc1dpdGhvdXRQcmlvclVzZXJJ
bnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pKQorICAgICAgICAgICAg
QVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgT3BlcmF0aW5nRGF0
ZXNXaW5kb3c6OkxvbmcpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlQoaGFzVXNlckdyYW50ZWRT
dG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCgqc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFt
ZURvbWFpbikgPT0gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMpOworI2VuZGlmCisg
ICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwgV2FsbFRpbWU6
Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1l
RG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0g
dG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzY29wZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3Jh
Z2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwg
cGFnZUlELCBzY29wZSwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIHN0b3JlXShTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCB3YXNHcmFudGVkKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbd2FzR3Jh
bnRlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mo
W3N0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNo
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBm
b3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZ2lz
dHJhYmxlRG9tYWluKTsKKyAgICAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMgd2FzIG5vdCBjb21wbGV0ZWQg
ZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgIH0KKworICAgIGF1dG8g
ZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xv
dyhtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0g
MSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgYnVpbGRMaXN0KGRvbWFpbnMpLCAiKSIp
KTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1h
cnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBmb3Ig
ZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSIsIHRoaXMpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50
UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURv
bWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNl
KCkpOworCisgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4oZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1Io
bV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWls
ZWQgaW5zZXJ0IGF0dGVtcHQgZm9yIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UiLCB0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkpOworCisgICAgICAgIGlmIChk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQ
RGVidWcsICJEaWQgc2V0ICUiIFBSSVZBVEVfTE9HX1NUUklORyAiIGFzIHByZXZhbGVudCByZXNv
dXJjZSBmb3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRl
YnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3Nh
Z2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW0lUUF0gRGlkIHNldCAnIl9zLCBkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5nKCksICInIGFzIHByZXZhbGVudCByZXNvdXJjZSBm
b3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiJfcykpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRp
cmVjdCwgYm9vbCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1l
bnRMb2FkLCBib29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BGcmFtZURv
bWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKKyAgICBib29s
IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSBzb3Vy
Y2VEb21haW47CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9u
SWZOZWNlc3NhcnkoKTsKKworICAgIGJvb2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7
CisgICAgaWYgKCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1Nh
bWVTaXRlIHx8IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKKyAgICAgICAg
YXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQp
IHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2FzIG5vdCBj
b21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgZG9tYWluIiwg
dGhpcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlTGFz
dFNlZW4odGFyZ2V0RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVz
b2x1dGlvbihXYWxsVGltZTo6bm93KCkpKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4gfSksICp0YXJnZXRSZXN1bHQuc2Vjb25kKTsK
KyAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
IWFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkgeworICAgICAgICBpZiAoaXNNYWlu
RnJhbWUpIHsKKyAgICAgICAgICAgIGJvb2wgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERlbGF5V2l0
aG91dFVzZXJJbnRlcmFjdGlvbiA9ICF3YXNQb3RlbnRpYWxseUluaXRpYXRlZEJ5VXNlciAmJiBk
ZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkIDwgcGFyYW1ldGVycygpLm1pbkRlbGF5QWZ0
ZXJNYWluRnJhbWVEb2N1bWVudExvYWRUb05vdEJlQVJlZGlyZWN0OworICAgICAgICAgICAgaWYg
KGlzUmVkaXJlY3QgfHwgd2FzTmF2aWdhdGVkQWZ0ZXJTaG9ydERlbGF5V2l0aG91dFVzZXJJbnRl
cmFjdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21h
aW4pOworICAgICAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0
LnNlY29uZCkgeworICAgICAgICAgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZp
Z2F0aW9uIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQgb2Yg
dGFyZ2V0IG9yIHJlZGlyZWN0aW5nIGRvbWFpbiAoaXNNYWluRnJhbWUpIiwgdGhpcyk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdGFyZ2V0RG9tYWluIH0pLCAqcmVk
aXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZWRp
cmVjdCkgeworICAgICAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0
KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRR
dWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyB0YXJnZXREb21haW4gfSksICpyZWRp
cmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiRGlkIHNldCAlIiBQVUJMSUNfTE9HX1NUUklO
RyAiIGFzIG1ha2luZyBhIHRvcCBmcmFtZSByZWRpcmVjdCB0byAlIiBQVUJMSUNfTE9HX1NUUklO
RyAiLiIsIHNvdXJjZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0YXJnZXREb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0Jy
b2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2
ZWw6OkluZm8sIG1ha2VTdHJpbmcoIkRpZCBzZXQgJyIsIHNvdXJjZURvbWFpbi5zdHJpbmcoKSwg
IicgYXMgbWFraW5nIGEgdG9wIGZyYW1lIHJlZGlyZWN0IHRvICciLCB0YXJnZXREb21haW4uc3Ry
aW5nKCksICInLiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHNvdXJj
ZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAgICAgIHN0YXRp
c3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoaXNSZWRpcmVjdCkgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURv
bWFpbik7CisgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAgICAgICBp
ZiAoIXRhcmdldFJlc3VsdC5zZWNvbmQgfHwgIXJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCkgeworICAgICAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24gd2Fz
IG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCBvZiB0YXJnZXQgb3Ig
cmVkaXJlY3RpbmcgZG9tYWluIChpc1JlZGlyZWN0KSIsIHRoaXMpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHRhcmdldERvbWFpbiB9KSwgKnJlZGlyZWN0aW5nRG9tYWluUmVzdWx0
LnNlY29uZCk7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHNvdXJjZURvbWFpbiB9KSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpOworICAgICAgICAgICAg
c3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oY29uc3QgTmF2aWdh
dGVkRnJvbURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mIHRvRG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChmcm9t
RG9tYWluICE9IHRvRG9tYWluKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0b0RvbWFpblJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvRG9tYWluKTsKKyAg
ICBpZiAoIXRvRG9tYWluUmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9n
Q3Jvc3NTaXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbiB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8g
ZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxpbmtEZWNvcmF0aW9uc0Zy
b21RdWVyeSwgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4oeyBmcm9tRG9tYWluIH0pLCAqdG9E
b21haW5SZXN1bHQuc2Vjb25kKTsKKyAgICAKKyAgICBpZiAoaXNQcmV2YWxlbnRSZXNvdXJjZShm
cm9tRG9tYWluKSkKKyAgICAgICAgc2V0SXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVt
b3ZhbCh0b0RvbWFpbiwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlv
bklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgaWYgKCF0YXJnZXRS
ZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byByZW1vdmVS
ZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRF
TEVURSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5m
b3JjZW1lbnQgV0hFUkUgc291cmNlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAoIXJlbW92ZVJl
ZGlyZWN0c1RvU2luY2VTYW1lU2l0ZQorICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNl
U2FtZVNpdGUtPmJpbmRJbnQoMSwgKnRhcmdldFJlc3VsdC5zZWNvbmQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCByZW1vdmVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGUtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50IGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisg
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
LCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVyYWN0aW9u
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGF1dG8gc2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5LCAic2V0VXNl
ckludGVyYWN0aW9uIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RSZWNlbnRJ
bnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGRvbWFpbi5zdHJpbmcoKSkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5l
Y2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgewor
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIHdhcyBub3QgY29tcGxldGVk
IGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBib29sIGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbiA9IGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihkb21haW4sIE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKTsKKyAgICBz
ZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOworCisgICAg
aWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNh
Y3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byB0
YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb21haW4pOworICAgIGlmICghdGFyZ2V0UmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIGZhbHNlLCB7IH0pOworCisgICAgYXV0byByZW1v
dmVTdG9yYWdlQWNjZXNzID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUgRlJP
TSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSA/Il9z
KTsKKyAgICBpZiAoIXJlbW92ZVN0b3JhZ2VBY2Nlc3MKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFn
ZUFjY2Vzcy0+YmluZEludCgxLCAqdGFyZ2V0UmVzdWx0LnNlY29uZCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3MtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKwor
ICAgIC8vIFVwZGF0ZSBjb29raWUgYmxvY2tpbmcgdW5jb25kaXRpb25hbGx5IHNpbmNlIGEgY2Fs
bCB0byBoYXNIYWRVc2VySW50ZXJhY3Rpb24oKQorICAgIC8vIHRvIGNoZWNrIHRoZSBwcmV2aW91
cyB1c2VyIGludGVyYWN0aW9uIHN0YXR1cyBjb3VsZCBjYWxsIGNsZWFyVXNlckludGVyYWN0aW9u
KCksCisgICAgLy8gYmxvd2luZyB0aGUgY2FsbCBzdGFjay4KKyAgICB1cGRhdGVDb29raWVCbG9j
a2luZyhXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2hhZFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudCwgaGFkVXNlckludGVyYWN0aW9uUXVlcnksICJoYXNIYWRVc2VySW50ZXJhY3Rpb24i
X3MpOworICAgIGlmICghc2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVu
dC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBJVFBfUkVM
RUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAhIXNjb3BlZFN0YXRlbWVudC0+Y29sdW1uSW50KDApOworICAgIGlmICghaGFkVXNl
ckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
c2NvcGVkU3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMSkpOworCisgICAgaWYgKGhhc1N0YXRpc3Rp
Y3NFeHBpcmVkKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBvcGVyYXRpbmdEYXRlc1dp
bmRvdykpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ug
d2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0
aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJl
c2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAgIGNsZWFyVXNlckludGVy
YWN0aW9uKGRvbWFpbiwgW10geyB9KTsKKyAgICAgICAgaGFkVXNlckludGVyYWN0aW9uID0gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVu
Y2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc2hvdWxk
U2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVnaXN0cmFi
bGVEb21haW5JRCA9IGRvbWFpbklEKGRvbWFpbik7CisgICAgaWYgKCFyZWdpc3RyYWJsZURvbWFp
bklEKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSBkb21haW5J
RCBzaG91bGQgZXhpc3QgYnV0IHdhcyBub3QgZm91bmQuIiwgdGhpcyk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzY29w
ZWRVcGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCB1cGRhdGVQcmV2YWxlbnRSZXNv
dXJjZVF1ZXJ5LCAic2V0UHJldmFsZW50UmVzb3VyY2UiX3MpOworICAgIGlmICghc2NvcGVkVXBk
YXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkVXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHNjb3BlZFVwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgy
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRVcGRhdGVQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNjb3BlZFVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNv
dXJjZVN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudCwgdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnksICJz
ZXRQcmV2YWxlbnRSZXNvdXJjZSB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2UiX3MpOworICAg
IGlmIChuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKSB7
CisgICAgICAgIGlmICghc2NvcGVkVXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
CisgICAgICAgICAgICB8fCBzY29wZWRVcGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzY29wZWRVcGRh
dGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzY29wZWRVcGRhdGVWZXJ5UHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgU3RkU2V0PHVuc2ln
bmVkPiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7CisgICAgcmVjdXJzaXZlbHlGaW5k
Tm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKCpyZWdpc3RyYWJs
ZURvbWFpbklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOworICAgIHNldERv
bWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RG9tYWluc0FzUHJl
dmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnRTbG93KG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0
KGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoIWRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCB8fCBk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGlm
IChkYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCgpKSB7CisgICAgICAgIG1fZGF0YVJlY29yZFJlbW92
YWxDb21wbGV0aW9uSGFuZGxlcnMuYXBwZW5kKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50
ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZ2V0QWxsRG9tYWluc1N0YXRlbWVudCwgZ2V0QWxs
RG9tYWluc1F1ZXJ5LCAiZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MiX3MpOworICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPFN0cmlu
Zz4gZG9tYWluczsKKyAgICB3aGlsZSAoc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgZG9tYWlucy5hcHBlbmQoc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5UZXh0
KDApKTsKKyAgICBzdGQ6OnNvcnQoZG9tYWlucy5iZWdpbigpLCBkb21haW5zLmVuZCgpLCBXVEY6
OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7CisKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
KyAgICByZXN1bHQuYXBwZW5kKCJSZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3M6XG5cbiIpOworICAg
IGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykKKyAgICAgICAgcmVzb3VyY2VUb1N0cmluZyhy
ZXN1bHQsIGRvbWFpbik7CisKKyAgICBhdXRvIHRoaXJkUGFydHlEYXRhID0gYWdncmVnYXRlZFRo
aXJkUGFydHlEYXRhKCk7CisgICAgaWYgKCF0aGlyZFBhcnR5RGF0YS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiXG5JVFAgRGF0YTpcbiIpOworICAgICAgICBmb3IgKGF1dG8g
dGhpcmRQYXJ0eSA6IHRoaXJkUGFydHlEYXRhKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0
aGlyZFBhcnR5LnRvU3RyaW5nKCksICdcbicpOworICAgIH0KKyAgICBjb21wbGV0aW9uSGFuZGxl
cihyZXN1bHQudG9TdHJpbmcoKSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29w
ZSYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFwcmVk
aWNhdGVTdGF0ZW1lbnQKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBwcmVkaWNhdGVTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19F
UlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcmVk
aWNhdGVWYWx1ZUZvckRvbWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gISFwcmVkaWNhdGVTdGF0ZW1lbnQt
PmNvbHVtbkludCgwKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzaG91bGRTa2lw
KGRvbWFpbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVt
ZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dCwgaXNQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiaXNQcmV2YWxlbnRSZXNvdXJjZSJfcyk7Cisg
ICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKHNjb3BlZFN0YXRlbWVudCwgZG9tYWlu
KTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRo
aXMtPnNjb3BlZFN0YXRlbWVudChtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBp
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5LCAiaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UiX3Mp
OworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihzY29wZWRTdGF0ZW1lbnQsIGRv
bWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVy
ZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNl
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bkV4aXN0c1N0YXRlbWVudCwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzUXVl
cnksICJpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJyZXNvdXJjZURvbWFp
biksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3Vi
RnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBhdXRvIHNjb3Bl
ZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1N0YXRlbWVudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
UXVlcnksICJpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIiX3MpOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChzdWJGcmFtZURvbWFpbiks
IHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYg
cmVkaXJlY3RlZEZyb21Eb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgcmVkaXJlY3Rl
ZFRvRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzU3RhdGVtZW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvRXhpc3RzUXVlcnksICJpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8iX3MpOwor
ICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMoc2NvcGVkU3RhdGVtZW50LCBkb21haW5JRChy
ZWRpcmVjdGVkRnJvbURvbWFpbiksIHJlZGlyZWN0ZWRUb0RvbWFpbik7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNl
c3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2Ugd2FzIG5vdCBjb21wbGV0
ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgY2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZVF1ZXJ5LCAiY2xlYXJQcmV2YWxlbnRSZXNvdXJjZSJfcyk7CisgICAgCisgICAgaWYg
KCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgx
LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgd2FzIG5vdCBjb21wbGV0ZWQgZHVlIHRvIGZh
aWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdXBk
YXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudCwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5LCAic2V0
R3JhbmRmYXRoZXJlZCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwg
c2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgc2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0SXNTY2hlZHVsZWRGb3JBbGxC
dXRDb29raWVEYXRhUmVtb3ZhbChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29s
IHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0
cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0
YXRlbWVudChtX3VwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxTdGF0
ZW1lbnQsIHVwZGF0ZUlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWxRdWVyeSwg
InNldElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiX3MpOworICAgIGlmICgh
c2NvcGVkU3RhdGVtZW50CisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgxLCB2
YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQo
MiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVt
ZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldElz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworU2Vj
b25kcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldE1vc3RSZWNlbnRseVVwZGF0ZWRU
aW1lc3RhbXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkRvbWFpbiwgY29uc3QgVG9wRnJh
bWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3ViRnJhbWVEb21haW5J
RCA9IGRvbWFpbklEKHN1YkRvbWFpbik7CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdG9w
RnJhbWVEb21haW5JRCA9IGRvbWFpbklEKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGlmICghc3Vi
RnJhbWVEb21haW5JRCB8fCAhdG9wRnJhbWVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuIFNlY29u
ZHMgeyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpOb0V4aXN0aW5nVGltZXN0YW1wIH07CisgICAg
CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9nZXRN
b3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wU3RhdGVtZW50LCBnZXRNb3N0UmVjZW50bHlVcGRh
dGVkVGltZXN0YW1wUXVlcnksICJnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wIl9zKTsK
KyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgKnN1YkZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMywgKnN1YkZyYW1lRG9tYWluSUQp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNCwgKnRv
cEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQt
PmJpbmRJbnQoNSwgKnN1YkZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNiwgKnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoNywgKnN1YkZyYW1lRG9tYWlu
SUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoOCwg
KnRvcEZyYW1lRG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Z2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBTZWNv
bmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1RpbWVzdGFtcCAgfTsKKyAg
ICB9CisgICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAg
ICAgIHJldHVybiBTZWNvbmRzIHsgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6Tm9FeGlzdGluZ1Rp
bWVzdGFtcCAgfTsKKworICAgIHJldHVybiBTZWNvbmRzIHsgc2NvcGVkU3RhdGVtZW50LT5jb2x1
bW5Eb3VibGUoMCkgfTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzY29wZWRTdGF0ZW1l
bnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIGlz
R3JhbmRmYXRoZXJlZFF1ZXJ5LCAiaXNHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICByZXR1cm4gcHJl
ZGljYXRlVmFsdWVGb3JEb21haW4oc2NvcGVkU3RhdGVtZW50LCBkb21haW4pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNz
YXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQp
IHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbiB3
YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUg
d2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBkb21haW4u
CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwTGlzdChzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgdG9wRnJhbWVEb21haW4g
fSksICpyZXN1bHQuc2Vjb25kKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURv
bWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0
byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
dWJyZXNvdXJjZURvbWFpbik7CisgICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4gd2FzIG5vdCBjb21w
bGV0ZWQgZHVlIHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2
ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcExpc3Qoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1
ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHRvcEZyYW1lRG9tYWluIH0pLCAqcmVz
dWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJl
c291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2Nv
cGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VE
b21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9M
T0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBm
YWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNz
IGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcExpc3Qoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNv
bnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisgICAgaWYg
KCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Np
b25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBh
dHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHJlZGlyZWN0IGRvbWFpbi4KKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBMaXN0KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWlu
Pih7IHJlZGlyZWN0RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVk
aXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4odG9wRnJhbWVEb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkgeworICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvIHdhcyBub3QgY29tcGxl
dGVkIGR1ZSB0byBmYWlsZWQgaW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExpc3QodG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb1F1ZXJ5LCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPih7IHJlZGlyZWN0
RG9tYWluIH0pLCAqcmVzdWx0LnNlY29uZCk7CisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
TGlzdCh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2Vt
ZW50UXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+KHsgcmVkaXJlY3REb21haW4gfSks
ICpyZXN1bHQuc2Vjb25kKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0cmFuc2FjdGlvblNjb3Bl
ID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWlu
KTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VS
Uk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tIHdhcyBub3QgY29tcGxldGVkIGR1ZSB0byBmYWlsZWQg
aW5zZXJ0IGF0dGVtcHQiLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcExp
c3QodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnksIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+KHsgcmVkaXJlY3REb21haW4gfSksICpyZXN1bHQuc2Vjb25kKTsKK30KKworc3RkOjpw
YWlyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6QWRkZWRSZWNvcmQsIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB7CisgICAg
ICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZG9tYWlu
SURGcm9tU3RyaW5nU3RhdGVtZW50LCBkb21haW5JREZyb21TdHJpbmdRdWVyeSwgImVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluIl9zKTsKKyAgICAgICAgaWYgKCFz
Y29wZWRTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQo
MSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIElUUF9SRUxF
QVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbiBmYWlsZWQs
IGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgMCB9OworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc2NvcGVkU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7Cisg
ICAgICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIGRvbWFpbklEIH07CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2VydmF0aW9uKGRv
bWFpbik7CisgICAgYXV0byByZXN1bHQgPSBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNlcnZh
dGlvbik7CisKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJS
T1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4gaW5zZXJ0T2JzZXJ2ZWREb21h
aW4gZmFpbGVkIHRvIGNvbXBsZXRlLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJ
TkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCBzdGQ6Om51bGxv
cHQgfTsKKyAgICB9CisKKyAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChk
b21haW4pLnZhbHVlKCkgfTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNsZWFyRGF0YWJhc2VDb250ZW50cygpCit7CisgICAgbV9kYXRhYmFzZS5jbGVhckFsbFRhYmxl
cygpOworCisgICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyRGF0
YWJhc2VDb250ZW50cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RyAiLCBkYXRhYmFzZSBwYXRoOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCksIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFp
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIGF1dG8gZG9tYWluSURU
b1JlbW92ZSA9IGRvbWFpbklEKGRvbWFpbik7CisgICAgaWYgKCFkb21haW5JRFRvUmVtb3ZlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5z
Y29wZWRTdGF0ZW1lbnQobV9yZW1vdmVBbGxEYXRhU3RhdGVtZW50LCByZW1vdmVBbGxEYXRhUXVl
cnksICJyZW1vdmVEYXRhRm9yRG9tYWluIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKmRvbWFpbklEVG9SZW1vdmUp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YUZvckRvbWFpbiBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmFsbERvbWFpbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9n
ZXRBbGxEb21haW5zU3RhdGVtZW50LCBnZXRBbGxEb21haW5zUXVlcnksICJhbGxEb21haW5zIl9z
KTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluczsKKyAgICB3aGlsZSAoc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgZG9tYWlucy5hcHBlbmQoUmVn
aXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmlu
ZyhzY29wZWRTdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkpKTsKKyAgICByZXR1cm4gZG9tYWluczsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGNsZWFyRGF0YWJhc2VDb250ZW50cygpOworICAgIGNsZWFy
T3BlcmF0aW5nRGF0ZXMoKTsKKworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJh
Y2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAg
cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdhdG9yXSB7IH0pOworCisgICAg
YXV0byByZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvciA9IGVuc3Vy
ZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIFJlZ2lzdHJhYmxlRG9tYWlu
c1RvQmxvY2tDb29raWVzRm9yIGRvbWFpbnNUb0Jsb2NrIHsgcmVnaXN0cmFibGVEb21haW5zVG9C
bG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIHsgfSwgeyB9LCB7IH0gfTsKKyAgICB1cGRhdGVDb29r
aWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3Jd
IHsgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjphcmVBbGxUaGly
ZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pCit7CisgICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAhaGFzSGFk
VXNlckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9u
ZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb29r
aWVBY2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb29raWVBY2Nlc3MoY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFp
biYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBhdXRvIHN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNU
IGlzUHJldmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCB8fCBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIHN1YnJlc291cmNlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNvb2tpZUFjY2VzcyBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgYm9vbCBoYXNOb0VudHJ5ID0gc3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVzsKKyAg
ICBib29sIGlzUHJldmFsZW50ID0gIWhhc05vRW50cnkgJiYgISFzdGF0ZW1lbnQtPmNvbHVtbklu
dCgwKTsKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICFoYXNOb0VudHJ5ICYmIHN0YXRl
bWVudC0+Y29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworCisgICAgaWYgKCFhcmVBbGxUaGly
ZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcih0b3BGcmFtZURvbWFpbikgJiYgIWlzUHJldmFsZW50
KQorICAgICAgICByZXR1cm4gQ29va2llQWNjZXNzOjpCYXNlZE9uQ29va2llUG9saWN5OworCisg
ICAgaWYgKCFOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNhblJlcXVlc3RTdG9yYWdlQWNjZXNzRm9y
TG9naW5PckNvbXBhdGliaWxpdHlQdXJwb3Nlc1dpdGhvdXRQcmlvclVzZXJJbnRlcmFjdGlvbihz
dWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pICYmICFoYWRVc2VySW50ZXJhY3Rpb24p
CisgICAgICAgIHJldHVybiBDb29raWVBY2Nlc3M6OkNhbm5vdFJlcXVlc3Q7CisKKyAgICByZXR1
cm4gQ29va2llQWNjZXNzOjpPbmx5SWZHcmFudGVkOworfQorCitTdG9yYWdlQWNjZXNzUHJvbXB0
V2FzU2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3Jh
Z2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIHJlcXVlc3RpbmdEb21haW5JRCwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZpcnN0UGFydHlEb21haW4pOworICAgIGlmICghcmVz
dWx0LnNlY29uZCkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQs
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdl
QWNjZXNzVGhyb3VnaFByb21wdCB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2Vy
dCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybiBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vOworICAgIH0KKworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9
ICpyZXN1bHQuc2Vjb25kOworCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBh
cmVTdGF0ZW1lbnQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8gQU5EIHRvcExldmVsRG9tYWluSUQgPSA/Il9z
KTsKKyAgICBpZiAoIXN0YXRlbWVudAorICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
cmVxdWVzdGluZ0RvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5i
aW5kSW50KDIsIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gU3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpObzsKKworICAgIHJldHVybiAhIXN0YXRlbWVudC0+
Y29sdW1uSW50KDApID8gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZZXMgOiBTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd246Ok5vOworfQorCitWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29r
aWVzRm9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7CisgICAgYXV0byBzdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCByZWdpc3RyYWJsZURvbWFp
biBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEgQU5EIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IDAiX3MpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4g
cmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENy
ZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkp
KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNUb0Jsb2NrQnV0S2VlcENv
b2tpZXNGb3IoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIGF1dG8gc3RhdGVtZW50
ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4g
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIEFORCBoYWRVc2VySW50
ZXJhY3Rpb24gPSAxIl9zKTsKKyAgICBpZiAoIXN0YXRlbWVudCkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVh
dGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7
CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNG
aXJzdFBhcnR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKKyAgICBhdXRvIHN0YXRlbWVu
dCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWlu
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEiX3MpOwor
ICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3
aGlsZSAoc3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5h
cHBlbmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURv
bWFpblN0cmluZyhzdGF0ZW1lbnQtPmNvbHVtblRleHQoMCkpKTsKKworICAgIHJldHVybiByZXN1
bHRzOworfQorCitIYXNoTWFwPFRvcEZyYW1lRG9tYWluLCBTdWJSZXNvdXJjZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5zV2l0aFN0b3JhZ2VBY2Nlc3MoKSBjb25z
dAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFzaE1hcDxXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4+IHJlc3Vs
dHM7CisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNF
TEVDVCBzdWJGcmFtZURvbWFpbiwgcmVnaXN0cmFibGVEb21haW4gRlJPTSAoU0VMRUNUIG8ucmVn
aXN0cmFibGVEb21haW4gYXMgc3ViRnJhbWVEb21haW4sIHMudG9wTGV2ZWxEb21haW5JRCBhcyB0
b3BMZXZlbERvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIGFzIG8gSU5ORVIgSk9JTiBTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgYXMgcyBXSEVSRSBvLmRvbWFpbklEID0gcy5k
b21haW5JRCkgYXMgeiBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBkb21haW5JRCA9IHou
dG9wTGV2ZWxEb21haW5JRDsiX3MpOworICAgIGlmICghc3RhdGVtZW50KQorICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICByZXN1bHRzLmFkZChSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRl
RnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC0+Y29sdW1uVGV4dCgxKSksIFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDApKSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yID0gdGhpcy0+ZG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9y
KCk7CisgICAgYXV0byBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yID0gdGhpcy0+ZG9t
YWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvcigpOworICAgIGF1dG8gZG9tYWluc1dpdGhVc2Vy
SW50ZXJhY3Rpb25Bc0ZpcnN0UGFydHkgPSB0aGlzLT5kb21haW5zV2l0aFVzZXJJbnRlcmFjdGlv
bkFzRmlyc3RQYXJ0eSgpOworICAgIGF1dG8gZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzID0gdGhp
cy0+ZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzKCk7CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2tB
bmREZWxldGVDb29raWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zVG9CbG9ja0J1dEtlZXBDb29r
aWVzRm9yLmlzRW1wdHkoKSAmJiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0
eS5pc0VtcHR5KCkgJiYgZG9tYWluc1dpdGhTdG9yYWdlQWNjZXNzLmlzRW1wdHkoKSkgeworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nvb2tpZXNGb3IgZG9tYWluc1RvQmxvY2sgeyBkb21h
aW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IsIGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tp
ZXNGb3IsIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5LCBkb21haW5zV2l0
aFN0b3JhZ2VBY2Nlc3MgfTsKKworICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgJiYgKCFk
b21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tpZXNGb3IuaXNFbXB0eSgpIHx8ICFkb21haW5zVG9C
bG9ja0J1dEtlZXBDb29raWVzRm9yLmlzRW1wdHkoKSkpCisgICAgICAgIGRlYnVnTG9nRG9tYWlu
c0luQmF0Y2hlcygiQXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFja2luZyByZXN0cmljdGlvbnMiLCBk
b21haW5zVG9CbG9jayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGRvbWFpbnNU
b0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0
b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihk
b21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9
IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkod2Vha1RoaXMtPmRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhJVFBEZWJ1ZywgIkRvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFja2luZyByZXN0cmljdGlv
bnMuIik7CisgICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5kZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sICJb
SVRQXSBEb25lIGFwcGx5aW5nIGNyb3NzLXNpdGUgdHJhY2tpbmcgcmVzdHJpY3Rpb25zLiJfcyk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0p
OworfQorCitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpEb21haW5EYXRhPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbnMoKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFZlY3RvcjxEb21haW5EYXRhPiByZXN1
bHRzOworICAgIGF1dG8gc3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJT
RUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkLCBpc1NjaGVkdWxlZEZv
ckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsLCBjb3VudE9mVG9wRnJhbWVSZWRpcmVjdHMgRlJPTSBP
YnNlcnZlZERvbWFpbnMgTEVGVCBKT0lOIChTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKCop
IGFzIGNvdW50T2ZUb3BGcmFtZVJlZGlyZWN0cyBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgR1JPVVAgQlkgc291cmNlRG9tYWluSUQp
IGFzIHogT04gei5zb3VyY2VEb21haW5JRCA9IGRvbWFpbklEIl9zKTsKKyAgICBpZiAoIXN0YXRl
bWVudCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVu
dC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhdGVtZW50LT5jb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAs
IFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5T
dHJpbmcoc3RhdGVtZW50LT5jb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6
ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LT5jb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAs
IHN0YXRlbWVudC0+Y29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0
YXRlbWVudC0+Y29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC0+Y29sdW1uSW50KDUpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQtPmNvbHVtbkludCg2KSkKKyAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYgZG9tYWlu
SURzVG9DbGVhcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlm
IChkb21haW5JRHNUb0NsZWFyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBsaXN0VG9DbGVhciA9IGJ1aWxkTGlzdChkb21haW5JRHNUb0NsZWFyKTsKKworICAgIGF1dG8g
Y2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVu
dFNsb3cobWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJl
ZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb0NsZWFyLCAiKSIpKTsKKyAgICBpZiAo
IWNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nIGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVbmV4cGlyZWRS
ZWNlbnRVc2VySW50ZXJhY3Rpb24oY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMs
IE9wZXJhdGluZ0RhdGVzV2luZG93IG9wZXJhdGluZ0RhdGVzV2luZG93KQoreworICAgIGlmIChy
ZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgaGFzU3RhdGlzdGljc0V4cGly
ZWQocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIG9wZXJh
dGluZ0RhdGVzV2luZG93KSkgeworCisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUg
ZGF0YSBpZiB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICAgICAgaWYgKG9wZXJhdGluZ0RhdGVz
V2luZG93ID09IE9wZXJhdGluZ0RhdGVzV2luZG93OjpMb25nKQorICAgICAgICAgICAgY2xlYXJV
c2VySW50ZXJhY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIFtdIHsg
fSk7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiByZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVBbGxXZWJzaXRlRGF0YUZvcihjb25zdCBEb21haW5E
YXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
KQoreworICAgIHJldHVybiBpc1ByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdHJhYmxlRG9tYWluKSAmJiAhaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9u
KHJlc291cmNlU3RhdGlzdGljLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykgJiYgKCFzaG91
bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFyZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhl
cmVkKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92
ZUFsbEJ1dENvb2tpZXNGb3IoY29uc3QgRG9tYWluRGF0YSYgcmVzb3VyY2VTdGF0aXN0aWMsIGJv
b2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZykKK3sKKyAgICBib29sIGlzUmVtb3ZhbEVu
YWJsZWQgPSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpICE9IEZpcnN0UGFydHlX
ZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpOb25lIHx8IHJlc291cmNlU3RhdGlzdGljLmlzU2NoZWR1
bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWw7CisgICAgYm9vbCBpc1Jlc291cmNlR3JhbmRm
YXRoZXJlZCA9IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgcmVzb3VyY2VTdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZDsKKworICAgIE9wZXJhdGluZ0RhdGVzV2luZG93IHdpbmRvdyB7IH07
CisgICAgc3dpdGNoIChmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSgpKSB7CisgICAg
Y2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxsQnV0Q29va2llczoKKyAg
ICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZTo6Tm9uZToKKyAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OlNob3J0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxN
b2RlOjpBbGxCdXRDb29raWVzTGl2ZU9uVGVzdGluZ1RpbWVvdXQ6CisgICAgICAgIHdpbmRvdyA9
IE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVz
UmVwcm9UZXN0aW5nVGltZW91dDoKKyAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0ZXNXaW5k
b3c6OkZvclJlcHJvVGVzdGluZzsKKyAgICB9CisKKyAgICByZXR1cm4gaXNSZW1vdmFsRW5hYmxl
ZCAmJiAhaXNSZXNvdXJjZUdyYW5kZmF0aGVyZWQgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVz
ZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYywgd2luZG93KTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihE
b21haW5EYXRhJiByZXNvdXJjZVN0YXRpc3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0
aGVyaW5nKQoreworICAgIGlmICgoIWlzU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQo
KSAmJiAhc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4ocmVzb3Vy
Y2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICB8fCAoc2hvdWxkQ2hlY2tG
b3JHcmFuZGZhdGhlcmluZyAmJiByZXNvdXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQgPiBwYXJhbWV0
ZXJzKCkubWluaW11bVRvcEZyYW1lUmVkaXJlY3RzRm9yU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVu
dCkgeworICAgICAgICBjbGVhclRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRl
U3RyaWN0RW5mb3JjZW1lbnQocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIFtd
IHsgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojptb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShjb25zdCBEb21haW5EYXRhJiBzdGF0aXN0
aWMpCit7CisgICAgaWYgKHN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZS5z
ZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIHJldHVybiBzdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWU7Cit9CisKK1JlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNpdGVEYXRh
Rm9yIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9EZWxl
dGVPclJlc3RyaWN0V2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hv
dWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYm
IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKKworICAgIGlmIChzaG91bGRDbGVhckdy
YW5kZmF0aGVyaW5nKQorICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAo
KTsKKworICAgIGF1dG8gbm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgIGF1dG8gb2xkZXN0VXNl
ckludGVyYWN0aW9uID0gbm93OworICAgIFJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0
cmljdFdlYnNpdGVEYXRhRm9yIHRvRGVsZXRlT3JSZXN0cmljdEZvcjsKKworICAgIGF1dG8gdHJh
bnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgVmVj
dG9yPERvbWFpbkRhdGE+IGRvbWFpbnMgPSB0aGlzLT5kb21haW5zKCk7CisgICAgVmVjdG9yPHVu
c2lnbmVkPiBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmc7CisgICAgZm9yIChhdXRvJiBz
dGF0aXN0aWMgOiBkb21haW5zKSB7CisgICAgICAgIGlmIChzaG91bGRFeGVtcHRGcm9tV2Vic2l0
ZURhdGFEZWxldGlvbihzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ID0gdGhpcy0+bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoc3RhdGlzdGljKSkKKyAgICAg
ICAgICAgIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IHN0ZDo6bWluKG9sZGVzdFVzZXJJbnRlcmFj
dGlvbiwgKm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFuZGZh
dGhlcmluZykpIHsKKyAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9E
ZWxldGVBbGxDb29raWVzRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwor
ICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNv
b2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4pOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUFsbEJ1dENvb2tp
ZXNGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKSkgeworICAgICAg
ICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29r
aWVXZWJzaXRlRGF0YUZvci5hcHBlbmQoc3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAg
ICAgICAgICAgICAgICBzZXRJc1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKHN0
YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHNob3VsZEVuZm9yY2VTYW1lU2l0ZVN0cmljdEZvcihzdGF0aXN0aWMsIHNob3Vs
ZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpKSB7CisgICAgICAgICAgICAgICAgdG9EZWxldGVPclJl
c3RyaWN0Rm9yLmRvbWFpbnNUb0VuZm9yY2VTYW1lU2l0ZVN0cmljdEZvci5hcHBlbmQoc3RhdGlz
dGljLnJlZ2lzdHJhYmxlRG9tYWluKTsKKworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk8oSVRQRGVidWcsICJTY2hlZHVsZWQgJSIgUFVCTElDX0xPR19TVFJJTkcgIiB0byBoYXZl
IGl0cyBjb29raWVzIHNldCB0byBTYW1lU2l0ZT1zdHJpY3QuIiwgc3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBk
ZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNz
YWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIlNjaGVkdWxlZCAnIiwgc3RhdGlzdGljLnJlZ2lz
dHJhYmxlRG9tYWluLnN0cmluZygpLCAiJyB0byBoYXZlIGl0cyBjb29raWVzIHNldCB0byBTYW1l
U2l0ZT1zdHJpY3QnLiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgJiYgc3RhdGlzdGlj
LmdyYW5kZmF0aGVyZWQpCisgICAgICAgICAgICBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJp
bmcuYXBwZW5kKHN0YXRpc3RpYy5kb21haW5JRCk7CisgICAgfQorCisgICAgLy8gR2l2ZSB0aGUg
dXNlciBlbm91Z2ggdGltZSB0byBpbnRlcmFjdCB3aXRoIHdlYnNpdGVzIHVudGlsIHdlIHJlbW92
ZSBub24tY29va2llIHdlYnNpdGUgZGF0YS4KKyAgICBpZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5p
bmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA8IHBhcmFtZXRlcnMoKS5taW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpCisgICAgICAgIHRvRGVsZXRlT3JSZXN0
cmljdEZvci5kb21haW5zVG9EZWxldGVBbGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5jbGVhcigp
OworCisgICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xlYXJHcmFu
ZGZhdGhlcmluZykpOworICAgIAorICAgIHJldHVybiB0b0RlbGV0ZU9yUmVzdHJpY3RGb3I7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1bnNpZ25l
ZCBjb3VudCA9IDA7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0
ZW1lbnQobV9vYnNlcnZlZERvbWFpbkNvdW50U3RhdGVtZW50LCBvYnNlcnZlZERvbWFpbkNvdW50
UXVlcnksICJwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0
ZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc2NvcGVkU3RhdGVtZW50LT5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgY291bnQgPSBzY29wZWRTdGF0ZW1lbnQtPmNv
bHVtbkludCgwKTsKKworICAgIGlmIChjb3VudCA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGlj
c0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1
bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisK
KyAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gcGFyYW1ldGVycygpLnBydW5l
RW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBhdXRv
IHJlY29yZHNUb1BydW5lID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgZG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgT1JERVIgQlkgaGFkVXNlckludGVyYWN0aW9uLCBp
c1ByZXZhbGVudCwgbGFzdFNlZW4gTElNSVQgPyJfcyk7CisgICAgaWYgKCFyZWNvcmRzVG9QcnVu
ZSB8fCByZWNvcmRzVG9QcnVuZS0+YmluZEludCgxLCBjb3VudExlZnRUb1BydW5lKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAgICB3
aGlsZSAocmVjb3Jkc1RvUHJ1bmUtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRy
aWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUtPmNvbHVtbkludCgwKSk7CisKKyAgICBh
dXRvIGxpc3RUb1BydW5lID0gYnVpbGRMaXN0KGVudHJpZXNUb1BydW5lKTsKKworICAgIGF1dG8g
cHJ1bmVDb21tYW5kID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50U2xvdyhtYWtlU3RyaW5n
KCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RU
b1BydW5lLCAiKSIpKTsKKyAgICBpZiAoIXBydW5lQ29tbWFuZCB8fCBwcnVuZUNvbW1hbmQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIAorICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVt
ZW50KG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQsIHVwZGF0ZUxhc3RTZWVuUXVlcnksICJ1cGRh
dGVMYXN0U2VlbiJfcyk7CisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kRG91YmxlKDEsIGxhc3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+YmluZFRl
eHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9H
X0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVw
ZGF0ZUxhc3RTZWVuIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xP
R19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25J
Zk5lY2Vzc2FyeSgpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIGlmICghcmVzdWx0LnNlY29uZCkg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TGFzdFNlZW4gd2FzIG5vdCBjb21wbGV0ZWQgZHVl
IHRvIGZhaWxlZCBpbnNlcnQgYXR0ZW1wdCIsIHRoaXMpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHVwZGF0ZUxhc3RTZWVuKGRvbWFpbiwgV2FsbFRpbWU6OmZyb21SYXdTZWNv
bmRzKHNlY29uZHMuc2Vjb25kcygpKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHNob3Vs
ZFNraXAoZG9tYWluKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB0cmFuc2FjdGlvblNj
b3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Cisg
ICAgaWYgKCFyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUiht
X3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBkdWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0
IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNv
dXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3Nhcnko
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBpZiAoIXJlc3VsdC5zZWNvbmQpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSB3YXMgbm90IGNvbXBsZXRlZCBk
dWUgdG8gZmFpbGVkIGluc2VydCBhdHRlbXB0IiwgdGhpcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OlZlcnlIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
LCBpbnQgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisg
ICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV91cGRhdGVE
YXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQsIHVwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFF1ZXJ5
LCAidXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVu
dAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVEYXRhUmVjb3Jkc1Jl
bW92ZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklO
RywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBzdWJmcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZy
YW1lRG9tYWluKQoreworICAgIGF1dG8gc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgPSBtX2Rh
dGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoY291bnRTdWJmcmFtZVVuZGVyVG9wRnJhbWVRdWVyeSk7
CisgICAgYXV0byBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVDb3VudCA9IG1fZGF0YWJhc2UucHJl
cGFyZVN0YXRlbWVudChjb3VudFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZVF1ZXJ5KTsKKyAgICBh
dXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0
ZW1lbnQoY291bnRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpOworICAgIAorICAg
IGlmICghc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQgfHwgIXN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZUNvdW50IHx8ICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSB7CisgICAgICAgIElU
UF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBwcmVwYXJlLCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291
bnQtPmJpbmRJbnQoMSwgZG9tYWluSUQoc3ViZnJhbWVEb21haW4pLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdWJGcmFtZVVuZGVyVG9wRnJhbWVDb3VudC0+YmluZEludCgyLCBk
b21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZy
YW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lQ291bnQtPmJpbmRJbnQoMiwgZG9tYWluSUQodG9wRnJhbWVEb21haW4pLnZh
bHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLT5iaW5kSW50KDEsIGRvbWFpbklEKHN1YmZyYW1lRG9tYWluKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+YmluZEludCgy
LCBkb21haW5JRCh0b3BGcmFtZURvbWFpbikudmFsdWUoKSkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpjb3VudFN1YlN0YXRpc3RpY3NUZXN0aW5nIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoc3ViRnJhbWVVbmRlclRvcEZyYW1l
Q291bnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XCisgICAgICAgIHx8IHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZUNvdW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAgICB8fCBzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvLT5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiAoc3ViRnJhbWVVbmRlclRvcEZyYW1lQ291bnQtPmNv
bHVtbkludCgwKSA9PSAxICYmIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZUNvdW50LT5jb2x1bW5J
bnQoMCkgPT0gMSAmJiBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLT5jb2x1bW5JbnQoMCkg
PT0gMSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZEJvb2xlYW4oU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgY29uc3QgU3RyaW5nJiBsYWJlbCwgYm9vbCBmbGFnKQoreworICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgICAgIiwgbGFiZWwsICI6ICIsIGZsYWcgPyAiWWVzIiA6ICJObyIpOworfQorCitzdGF0
aWMgdm9pZCBhcHBlbmROZXh0RW50cnkoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgU3Ry
aW5nJiBlbnRyeSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICAgICAiLCBlbnRyeSwgJ1xu
Jyk7Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdldERvbWFpblN0
cmluZ0Zyb21Eb21haW5JRCh1bnNpZ25lZCBkb21haW5JRCkgY29uc3QKK3sKKyAgICBhdXRvIHJl
c3VsdCA9IGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9kb21haW5TdHJpbmdGcm9tRG9tYWluSURTdGF0ZW1lbnQs
IGRvbWFpblN0cmluZ0Zyb21Eb21haW5JRFF1ZXJ5LCAiZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFp
bklEIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9PSykgeworICAgICAgICBJVFBf
UkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Z2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklELiBTdGF0ZW1lbnQgZmFpbGVkIHRv
IHByZXBhcmUgb3IgYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGlmIChzY29w
ZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHQgPSBtX2Rv
bWFpblN0cmluZ0Zyb21Eb21haW5JRFN0YXRlbWVudC0+Y29sdW1uVGV4dCgwKTsKKyAgICAKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitBU0NJSUxpdGVyYWwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpnZXRTdWJTdGF0aXN0aWNTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUp
IGNvbnN0Cit7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9wTGV2ZWxEb21haW5JRCBmcm9t
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ID8iX3M7
CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyIpCisgICAg
ICAgIHJldHVybiAiU0VMRUNUIHRvRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09ICJU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20iKQorICAgICAgICByZXR1cm4gIlNFTEVDVCBmcm9t
RG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9t
YWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0gIlRvcEZyYW1lTGlua0RlY29yYXRp
b25zRnJvbSIpCisgICAgICAgIHJldHVybiAiU0VMRUNUIGZyb21Eb21haW5JRCBmcm9tIFRvcEZy
YW1lTGlua0RlY29yYXRpb25zRnJvbSBXSEVSRSB0b0RvbWFpbklEID0gPyJfczsKKyAgICBpZiAo
dGFibGVOYW1lID09ICJUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzIikKKyAgICAgICAg
cmV0dXJuICJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCBmcm9tIFRvcEZyYW1lTG9hZGVkVGhp
cmRQYXJ0eVNjcmlwdHMgV0hFUkUgdG9wRnJhbWVEb21haW5JRCA9ID8iX3M7CisgICAgaWYgKHRh
YmxlTmFtZSA9PSAiU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyIpCisgICAgICAgIHJldHVy
biAiU0VMRUNUIHRvcEZyYW1lRG9tYWluSUQgZnJvbSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/Il9zOworICAgIGlmICh0YWJsZU5hbWUgPT0g
IlN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMiKQorICAgICAgICByZXR1cm4gIlNFTEVD
VCB0b3BGcmFtZURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyJfczsKKyAgICBpZiAodGFibGVOYW1lID09ICJT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgdG9E
b21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3Vy
Y2VEb21haW5JRCA9ID8iX3M7CisgICAgaWYgKHRhYmxlTmFtZSA9PSAiU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tIikKKyAgICAgICAgcmV0dXJuICJTRUxFQ1QgZnJvbURvbWFpbklEIGZy
b20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJFIHN1YnJlc291cmNlRG9tYWlu
SUQgPSA/Il9zOworICAgIAorICAgIHJldHVybiAiIl9zOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6YXBwZW5kU3ViU3RhdGlzdGljTGlzdChTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4pIGNv
bnN0Cit7CisgICAgYXV0byBxdWVyeSA9IGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudCh0YWJsZU5h
bWUpOworICAgIAorICAgIGlmICghcXVlcnkubGVuZ3RoKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBhdXRvIGRhdGEgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQocXVlcnkpOwor
ICAgIAorICAgIGlmICghZGF0YSB8fCBkYXRhLT5iaW5kSW50KDEsIGRvbWFpbklEKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tSG9zdChkb21haW4pKS52YWx1ZSgpKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmFwcGVuZFN1YlN0YXRpc3RpY0xpc3Qu
IFN0YXRlbWVudCBmYWlsZWQgdG8gcHJlcGFyZSBvciBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQ
UklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoZGF0YS0+c3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBidWlsZGVyLmFwcGVuZCgiICAgICIsIHRhYmxlTmFtZSwgIjpcbiIpOworICAgIAor
ICAgIGF1dG8gcmVzdWx0ID0gZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKGRhdGEtPmNvbHVt
bkludCgwKSk7CisgICAgYXBwZW5kTmV4dEVudHJ5KGJ1aWxkZXIsIHJlc3VsdCk7CisgICAgCisg
ICAgd2hpbGUgKGRhdGEtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdCA9
IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChkYXRhLT5jb2x1bW5JbnQoMCkpOworICAgICAg
ICBhcHBlbmROZXh0RW50cnkoYnVpbGRlciwgcmVzdWx0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBi
b29sIGhhc0hhZFJlY2VudFVzZXJJbnRlcmFjdGlvbihXVEY6OlNlY29uZHMgaW50ZXJhY3Rpb25U
aW1lU2Vjb25kcykKIHsKLSAgICBkb3VibGUgbXMgPSB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
bWlsbGlzZWNvbmRzKCk7Ci0gICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgaW50IHll
YXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgIGludCBtb250aCA9IG1vbnRoRnJvbURh
eUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLSAgICBpbnQgbW9udGhEYXkgPSBk
YXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLSAgICBy
ZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworICAgIHJldHVy
biBpbnRlcmFjdGlvblRpbWVTZWNvbmRzID4gU2Vjb25kcygwKSAmJiBXYWxsVGltZTo6bm93KCku
c2Vjb25kc1NpbmNlRXBvY2goKSAtIGludGVyYWN0aW9uVGltZVNlY29uZHMgPCAyNF9oOwogfQog
Ci1PcGVyYXRpbmdEYXRlIE9wZXJhdGluZ0RhdGU6OnRvZGF5KCkKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZXNvdXJjZVRvU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIs
IGNvbnN0IFN0cmluZyYgZG9tYWluKSBjb25zdAogewotICAgIHJldHVybiBPcGVyYXRpbmdEYXRl
Ojpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVu
dCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0
YXRlbWVudCwgZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lUXVlcnksICJyZXNvdXJjZVRvU3Ry
aW5nIl9zKTsKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3Bl
ZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0Vf
TE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlc291cmNlVG9TdHJpbmcuIFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCBvciBkb21haW4gd2Fz
IG5vdCBmb3VuZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVnaXN0cmFi
bGUgZG9tYWluOiAiLCBkb21haW4sICdcbicpOworICAgIAorICAgIC8vIFVzZXIgaW50ZXJhY3Rp
b24KKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJoYWRVc2VySW50ZXJhY3Rpb24iLCBtX2dl
dFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KEhhZFVzZXJJbnRl
cmFjdGlvbkluZGV4KSk7CisgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgYnVpbGRlci5h
cHBlbmQoIiAgICBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uOiAiKTsKKyAgICBpZiAoaGFzSGFk
UmVjZW50VXNlckludGVyYWN0aW9uKFNlY29uZHMobV9nZXRSZXNvdXJjZURhdGFCeURvbWFpbk5h
bWVTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZShNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZUlu
ZGV4KSkpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgid2l0aGluIDI0IGhvdXJzIik7CisgICAg
ZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEiKTsKKyAgICBidWlsZGVyLmFwcGVuZCgn
XG4nKTsKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJncmFuZGZhdGhlcmVkIiwgbV9nZXRS
ZXNvdXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChHcmFuZGZhdGhlcmVk
SW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKworICAgIC8vIFN0b3JhZ2UgYWNj
ZXNzCisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3RvcmFnZUFjY2Vzc1Vu
ZGVyVG9wRnJhbWVEb21haW5zIiwgZG9tYWluKTsKKworICAgIC8vIFRvcCBmcmFtZSBzdGF0cwor
ICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8iLCBkb21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQiLCBk
b21haW4pOworICAgIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoYnVpbGRlciwgIlRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChi
dWlsZGVyLCAiVG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tIiwgZG9tYWluKTsKKyAgICBhcHBl
bmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJUb3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3Jp
cHRzIiwgZG9tYWluKTsKKworICAgIGFwcGVuZEJvb2xlYW4oYnVpbGRlciwgIklzU2NoZWR1bGVk
Rm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFt
ZVN0YXRlbWVudC0+Y29sdW1uSW50KElzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92
YWxJbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworCisgICAgLy8gU3ViZnJhbWUg
c3RhdHMKKyAgICBhcHBlbmRTdWJTdGF0aXN0aWNMaXN0KGJ1aWxkZXIsICJTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zIiwgZG9tYWluKTsKKworICAgIC8vIFN1YnJlc291cmNlIHN0YXRzCisg
ICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyIsIGRvbWFpbik7CisgICAgYXBwZW5kU3ViU3RhdGlzdGljTGlzdChidWlsZGVy
LCAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyIsIGRvbWFpbik7CisgICAgYXBwZW5kU3Vi
U3RhdGlzdGljTGlzdChidWlsZGVyLCAiU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIiwg
ZG9tYWluKTsKKworICAgIC8vIFByZXZhbGVudCBSZXNvdXJjZQorICAgIGFwcGVuZEJvb2xlYW4o
YnVpbGRlciwgImlzUHJldmFsZW50UmVzb3VyY2UiLCBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWlu
TmFtZVN0YXRlbWVudC0+Y29sdW1uSW50KElzUHJldmFsZW50SW5kZXgpKTsKKyAgICBidWlsZGVy
LmFwcGVuZCgnXG4nKTsKKyAgICBhcHBlbmRCb29sZWFuKGJ1aWxkZXIsICJpc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSIsIG1fZ2V0UmVzb3VyY2VEYXRhQnlEb21haW5OYW1lU3RhdGVtZW50LT5jb2x1
bW5JbnQoSXNWZXJ5UHJldmFsZW50SW5kZXgpKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgiICAgIGRhdGFSZWNvcmRzUmVtb3ZlZDogIiwgbV9nZXRSZXNv
dXJjZURhdGFCeURvbWFpbk5hbWVTdGF0ZW1lbnQtPmNvbHVtbkludChEYXRhUmVjb3Jkc1JlbW92
ZWRJbmRleCkpOworICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOwogfQogCi1TZWNvbmRzIE9wZXJh
dGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklEKQogewot
ICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwg
bV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07CisgICAgYXV0byBzY29wZWRMaW5rRGVjb3Jh
dGlvbkV4aXN0c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2xpbmtEZWNvcmF0
aW9uRXhpc3RzU3RhdGVtZW50LCBsaW5rRGVjb3JhdGlvbkV4aXN0c1F1ZXJ5LCAiZG9tYWluSURF
eGlzdHNJbkRhdGFiYXNlIl9zKTsKKyAgICBhdXRvIHNjb3BlZFNjcmlwdExvYWRFeGlzdHNTdGF0
ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50
LCBzY3JpcHRMb2FkRXhpc3RzUXVlcnksICJkb21haW5JREV4aXN0c0luRGF0YWJhc2UgbGlua0Rl
Y29yYXRpb25FeGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIGF1dG8gc2NvcGVkU3ViRnJhbWVFeGlz
dHNTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zdWJGcmFtZUV4aXN0c1N0YXRl
bWVudCwgc3ViRnJhbWVFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBzdWJG
cmFtZUV4aXN0c1N0YXRlbWVudCJfcyk7CisgICAgYXV0byBzY29wZWRTdWJSZXNvdXJjZUV4aXN0
c1N0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3N1YlJlc291cmNlRXhpc3RzU3Rh
dGVtZW50LCBzdWJSZXNvdXJjZUV4aXN0c1F1ZXJ5LCAiZG9tYWluSURFeGlzdHNJbkRhdGFiYXNl
IHN1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50Il9zKTsKKyAgICBhdXRvIHNjb3BlZFVuaXF1ZVJl
ZGlyZWN0RXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fdW5pcXVlUmVk
aXJlY3RFeGlzdHNTdGF0ZW1lbnQsIHVuaXF1ZVJlZGlyZWN0RXhpc3RzUXVlcnksICJkb21haW5J
REV4aXN0c0luRGF0YWJhc2UgdW5pcXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQiX3MpOworICAg
IGF1dG8gc2NvcGVkT2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVk
U3RhdGVtZW50KG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LCBvYnNlcnZlZERvbWFp
bnNFeGlzdHNRdWVyeSwgImRvbWFpbklERXhpc3RzSW5EYXRhYmFzZSBvYnNlcnZlZERvbWFpbnNF
eGlzdHNTdGF0ZW1lbnQiX3MpOworICAgIAorICAgIGlmICghc2NvcGVkTGlua0RlY29yYXRpb25F
eGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgIXNjb3BlZFNjcmlwdExvYWRFeGlzdHNTdGF0ZW1l
bnQKKyAgICAgICAgfHwgIXNjb3BlZFN1YkZyYW1lRXhpc3RzU3RhdGVtZW50CisgICAgICAgIHx8
ICFzY29wZWRTdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVudAorICAgICAgICB8fCAhc2NvcGVkVW5p
cXVlUmVkaXJlY3RFeGlzdHNTdGF0ZW1lbnQKKyAgICAgICAgfHwgIXNjb3BlZE9ic2VydmVkRG9t
YWluc0V4aXN0c1N0YXRlbWVudAorICAgICAgICB8fCBtX2xpbmtEZWNvcmF0aW9uRXhpc3RzU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9s
aW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+YmluZEludCgx
LCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc2NyaXB0TG9hZEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
c3ViRnJhbWVFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDIsIGRvbWFp
bklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJSZXNvdXJjZUV4aXN0c1N0YXRlbWVu
dC0+YmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViUmVz
b3VyY2VFeGlzdHNTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgZG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRv
bWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0
YXRlbWVudC0+YmluZEludCgyLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
b2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhpc3RzSW5EYXRhYmFz
ZSBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9saW5rRGVj
b3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cKKyAgICAgICAgfHwg
bV9zY3JpcHRMb2FkRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAgICAg
ICB8fCBtX3N1YkZyYW1lRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVworICAg
ICAgICB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JP
VworICAgICAgICB8fCBtX3VuaXF1ZVJlZGlyZWN0RXhpc3RzU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVworICAgICAgICB8fCBtX29ic2VydmVkRG9tYWluc0V4aXN0c1N0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1f
c2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRvbWFpbklERXhp
c3RzSW5EYXRhYmFzZSBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9M
T0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1f
c2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudC0+Y29sdW1uSW50KDApIHx8IG1fc3ViRnJhbWVFeGlz
dHNTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSB8fCBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50
LT5jb2x1bW5JbnQoMCkgfHwgbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRlbWVudC0+Y29sdW1u
SW50KDApIHx8IG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50LT5jb2x1bW5JbnQoMCk7
CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRl
JiBvdGhlcikgY29uc3QKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVP
cGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKQogewotICAgIHJldHVybiBtX21vbnRoRGF5ID09IG90
aGVyLm1fbW9udGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRoICYmIG1feWVhciA9PSBv
dGhlci5tX3llYXI7CisgICAgYXV0byBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50ID0gbV9k
YXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPcGVyYXRpbmdE
YXRlczsiX3MpOworICAgIGF1dG8gZ2V0TW9zdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQg
PSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0
ZXMgT1JERVIgQlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDE7
Il9zKTsKKyAgICBhdXRvIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIlNFTEVDVCAqIEZST00gT3BlcmF0aW5nRGF0ZXMgT1JERVIg
QlkgeWVhciBERVNDLCBtb250aCBERVNDLCBtb250aERheSBERVNDIExJTUlUIDEgT0ZGU0VUID87
Il9zKTsKKworICAgIGlmICghY291bnRPcGVyYXRpbmdEYXRlc1N0YXRlbWVudCB8fCBjb3VudE9w
ZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGNvdW50T3BlcmF0aW5n
RGF0ZXNTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9vcGVy
YXRpbmdEYXRlc1NpemUgPSBjb3VudE9wZXJhdGluZ0RhdGVzU3RhdGVtZW50LT5jb2x1bW5JbnQo
MCk7CisKKyAgICBpZiAoIWdldE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50IHx8IGdl
dE1vc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykg
eworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJhbWV0ZXJzIGdl
dEZpcnN0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0ZSA9IE9wZXJhdGluZ0RhdGUoZ2V0TW9zdFJl
Y2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgwKSwgZ2V0TW9zdFJlY2VudE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgxKSwgZ2V0TW9zdFJlY2VudE9wZXJhdGlu
Z0RhdGVTdGF0ZW1lbnQtPmNvbHVtbkludCgyKSk7CisKKyAgICBpZiAoIWdldE9wZXJhdGluZ0Rh
dGVXaW5kb3dTdGF0ZW1lbnQpIHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vz
c2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZU9wZXJhdGlu
Z0RhdGVzUGFyYW1ldGVycyBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50IGZhaWxlZCBk
dXJpbmcgdGhlIGNhbGwgdG8gcHJlcGFyZSgpIHdpdGggZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HICIuIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fb3BlcmF0aW5nRGF0ZXNTaXplIDw9IG9wZXJhdGluZ0RhdGVzV2luZG93U2hvcnQgLSAx
KQorICAgICAgICBtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCAtIDEpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgfHwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ST1cpIHsKKyAgICAgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVPcGVyYXRpbmdEYXRl
c1BhcmFtZXRlcnMgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudCBmYWlsZWQgd2l0aCBl
cnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcgIi4gVGhlIGVycm9yIGNvdWxkIGJl
IGluIHRoZSBjYWxscyB0byBiaW5kKCkgb3Igc3RlcCgpLiIsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9zaG9ydFdpbmRvd09wZXJhdGluZ0Rh
dGUgPSBPcGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVt
bkludCgwKSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDEpLCBn
ZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworICAgIH0KKwor
ICAgIGlmIChtX29wZXJhdGluZ0RhdGVzU2l6ZSA8PSBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcg
LSAxKQorICAgICAgICBtX2xvbmdXaW5kb3dPcGVyYXRpbmdEYXRlID0gc3RkOjpudWxsb3B0Owor
ICAgIGVsc2UgeworICAgICAgICBnZXRPcGVyYXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5yZXNl
dCgpOworICAgICAgICBpZiAoZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+YmluZElu
dCgxLCBvcGVyYXRpbmdEYXRlc1dpbmRvd0xvbmcgLSAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgIHx8IGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlT3BlcmF0aW5nRGF0ZXNQYXJh
bWV0ZXJzIGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQgZmFpbGVkIHdpdGggZXJyb3Ig
bWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HICIuIFRoZSBlcnJvciBjb3VsZCBiZSBpbiB0
aGUgY2FsbHMgdG8gYmluZCgpIG9yIHN0ZXAoKS4iLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUgPSBP
cGVyYXRpbmdEYXRlKGdldE9wZXJhdGluZ0RhdGVXaW5kb3dTdGF0ZW1lbnQtPmNvbHVtbkludCgw
KSwgZ2V0T3BlcmF0aW5nRGF0ZVdpbmRvd1N0YXRlbWVudC0+Y29sdW1uSW50KDEpLCBnZXRPcGVy
YXRpbmdEYXRlV2luZG93U3RhdGVtZW50LT5jb2x1bW5JbnQoMikpOworICAgIH0KIH0KIAotYm9v
bCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkoKQogewotICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgp
IDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBhdXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAg
ICBpZiAobV9vcGVyYXRpbmdEYXRlc1NpemUgPiAwKSB7CisgICAgICAgIGlmICh0b2RheSA8PSBt
X21vc3RSZWNlbnRPcGVyYXRpbmdEYXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgp
OworCisgICAgaW50IHJvd3NUb1BydW5lID0gbV9vcGVyYXRpbmdEYXRlc1NpemUgLSBvcGVyYXRp
bmdEYXRlc1dpbmRvd0xvbmcgKyAxOworICAgIGlmIChyb3dzVG9QcnVuZSA+IDApIHsKKyAgICAg
ICAgYXV0byBkZWxldGVMZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFi
YXNlLnByZXBhcmVTdGF0ZW1lbnQoIkRFTEVURSBGUk9NIE9wZXJhdGluZ0RhdGVzIE9SREVSIEJZ
IHllYXIsIG1vbnRoLCBtb250aERheSBMSU1JVCA/OyJfcyk7CisgICAgICAgIGlmICghZGVsZXRl
TGVhc3RSZWNlbnRPcGVyYXRpbmdEYXRlU3RhdGVtZW50CisgICAgICAgICAgICB8fCBkZWxldGVM
ZWFzdFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgcm93c1RvUHJ1bmUp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgZGVsZXRlTGVhc3RSZWNlbnRPcGVyYXRpbmdE
YXRlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSBkZWxldGVMZWFz
dFJlY2VudE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3Nh
Z2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRpbmdEYXRlcyAo
eWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAgIGlmICghaW5z
ZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudAorICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRl
U3RhdGVtZW50LT5iaW5kSW50KDEsIHRvZGF5LnllYXIoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgdG9kYXkubW9udGgo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQt
PmJpbmRJbnQoMywgdG9kYXkubW9udGhEYXkoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkg
aW5zZXJ0T3BlcmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdXBkYXRlT3Bl
cmF0aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CiB9CiAKLWJvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0
b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNX
aW5kb3cpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIu
c2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIHN3aXRjaCAob3BlcmF0aW5nRGF0ZXNXaW5kb3cpIHsKKyAgICBjYXNlIE9wZXJhdGluZ0Rh
dGVzV2luZG93OjpMb25nOgorICAgICAgICBpZiAobV9sb25nV2luZG93T3BlcmF0aW5nRGF0ZSAm
JiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUpIDwgKm1fbG9uZ1dpbmRvd09wZXJhdGluZ0RhdGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6U2hvcnQ6
CisgICAgICAgIGlmIChtX3Nob3J0V2luZG93T3BlcmF0aW5nRGF0ZSAmJiBPcGVyYXRpbmdEYXRl
Ojpmcm9tV2FsbFRpbWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgKm1fc2hvcnRX
aW5kb3dPcGVyYXRpbmdEYXRlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkZvckxpdmVPblRlc3Rpbmc6Cisg
ICAgICAgIHJldHVybiBXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIG9wZXJhdGluZ1RpbWVXaW5kb3dGb3JMaXZlT25UZXN0aW5nOworICAgIGNhc2UgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6OkZvclJlcHJvVGVzdGluZzoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gSWYgd2UgZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3Ig
YW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRl
ciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5nKS4KKyAgICBpZiAodGhpcy0+cGFyYW1l
dGVycygpLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgaWYgKFdhbGxUaW1l
Ojpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgdGhpcy0+cGFyYW1ldGVy
cygpLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFN1c3BlbmRhYmxlV29ya1F1ZXVlJiB3b3JrUXVldWUsIFNo
b3VsZEluY2x1ZGVMb2NhbGhvc3Qgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCkKLSAgICA6IG1fc3Rv
cmUoc3RvcmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCi0gICAgLCBtX3Nob3VsZElu
Y2x1ZGVMb2NhbGhvc3Qoc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCkKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyhjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQ
YXNzZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0
Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCiB7Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgLy8gUG9wdWxhdGUgdGhlIE9wZXJhdGluZyBEYXRlcyB0YWJs
ZSB3aXRoIGVub3VnaCBkYXlzIHRvIHJlcXVpcmUgcHJ1bmluZy4KKyAgICBkb3VibGUgZGF5c0Fn
b0luU2Vjb25kcyA9IDA7CisKKyAgICBhdXRvIHRyYW5zYWN0aW9uU2NvcGUgPSBiZWdpblRyYW5z
YWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0gbnVt
YmVyT2ZPcGVyYXRpbmdEYXlzUGFzc2VkOyBpKyspIHsKKyAgICAgICAgZG91YmxlIGRheXNUb1N1
YnRyYWN0ID0gU2Vjb25kczo6ZnJvbUhvdXJzKDI0ICogaSkudmFsdWUoKTsKKyAgICAgICAgZGF5
c0Fnb0luU2Vjb25kcyA9IFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkgLSBkYXlzVG9TdWJ0cmFjdDsKKyAgICAgICAgYXV0byBkYXRlVG9JbnNlcnQgPSBPcGVyYXRp
bmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNl
Y29uZHMpKTsKKworICAgICAgICBhdXRvIGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQgPSBt
X2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIklOU0VSVCBPUiBJR05PUkUgSU5UTyBPcGVyYXRp
bmdEYXRlcyAoeWVhciwgbW9udGgsIG1vbnRoRGF5KSBTRUxFQ1QgPywgPywgPzsiX3MpOworICAg
ICAgICBpZiAoIWluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IGlu
c2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgZGF0ZVRvSW5zZXJ0LnllYXIo
KSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBpbnNlcnRPcGVyYXRpbmdEYXRlU3RhdGVt
ZW50LT5iaW5kSW50KDIsIGRhdGVUb0luc2VydC5tb250aCgpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgIHx8IGluc2VydE9wZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPmJpbmRJbnQoMywgZGF0ZVRv
SW5zZXJ0Lm1vbnRoRGF5KCkpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAg
ICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcgaW5zZXJ0T3Bl
cmF0aW5nRGF0ZVN0YXRlbWVudCBmYWlsZWQgdG8gc3RlcCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJ
VkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGluc2VydE9w
ZXJhdGluZ0RhdGVTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgfQorCisgICAgdXBkYXRlT3BlcmF0
aW5nRGF0ZXNQYXJhbWV0ZXJzKCk7CisKKyAgICAvLyBNYWtlIHN1cmUgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgaXMgdGhlIGxlYXN0IHJlY2VudCBvZiBhbGwgZW50cmllcy4KKyAgICBk
YXlzQWdvSW5TZWNvbmRzIC09IFNlY29uZHM6OmZyb21Ib3VycygyNCkudmFsdWUoKTsKKyAgICBh
dXRvIHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQsIGluc2VydE9ic2VydmVkRG9t
YWluUXVlcnksICJpbnNlcnRFeHBpcmVkU3RhdGlzdGljRm9yVGVzdGluZyJfcyk7CisgICAgaWYg
KHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kVGV4dChSZWdpc3RyYWJs
ZURvbWFpbkluZGV4LCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBz
Y29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZERvdWJsZShMYXN0U2Vlbklu
ZGV4LCBkYXlzQWdvSW5TZWNvbmRzKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5z
ZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSGFkVXNlckludGVyYWN0aW9uSW5k
ZXgsIGhhc1VzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZElu
c2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kRG91YmxlKE1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lSW5kZXgsIGRheXNBZ29JblNlY29uZHMpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludChHcmFuZGZh
dGhlcmVkSW5kZXgsIGZhbHNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoSXNQcmV2YWxlbnRJbmRleCwgaXNQcmV2
YWxlbnQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFp
blN0YXRlbWVudC0+YmluZEludChJc1ZlcnlQcmV2YWxlbnRJbmRleCwgZmFsc2UpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzY29wZWRJbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+Ymlu
ZEludChEYXRhUmVjb3Jkc1JlbW92ZWRJbmRleCwgMCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHNjb3BlZEluc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KFRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbkluZGV4LCAwKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQo
VGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSUluZGV4LCAwKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2NvcGVkSW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQtPmJpbmRJbnQoSXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbEluZGV4LCBp
c1NjaGVkdWxlZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKSAhPSBTUUxJVEVfT0spIHsKKyAg
ICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydEV4cGlyZWRTdGF0aXN0aWNGb3JUZXN0aW5nIGZhaWxl
ZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzY29wZWRJbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5z
ZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcgZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVz
c2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiB9CiAKLVJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSgpCitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGRvbWFp
biA6IGRvbWFpbnMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8g
IiIgOiAiLCAiLCBkb21haW4uc3RyaW5nKCkpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5n
KCk7CiB9CiAKLXVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29tcHV0ZUlt
cG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
CitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciYgZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmlj
dFdlYnNpdGVEYXRhRm9yKQogewotICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRp
c3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09IDE7Ci0gICAg
aWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIGltcG9y
dGFuY2UgLT0gMjsKLSAgICByZXR1cm4gaW1wb3J0YW5jZTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zVG9SZW1vdmVPclJlc3RyaWN0
V2Vic2l0ZURhdGFGb3IuZG9tYWluc1RvRGVsZXRlQWxsQ29va2llc0ZvcikKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoYnVpbGRlci5pc0VtcHR5KCkgPyAiIiA6ICIsICIsIGRvbWFpbi5zdHJpbmco
KSwgIihhbGwgZGF0YSkiKTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNUb1JlbW92
ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvci5kb21haW5zVG9EZWxldGVBbGxCdXRIdHRwT25seUNv
b2tpZXNGb3IpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGJ1aWxkZXIuaXNFbXB0eSgpID8gIiIg
OiAiLCAiLCBkb21haW4uc3RyaW5nKCksICIoYWxsIGJ1dCBIdHRwT25seSBjb29raWVzKSIpOwor
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWluc1RvUmVtb3ZlT3JSZXN0cmljdFdlYnNpdGVE
YXRhRm9yLmRvbWFpbnNUb0RlbGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZChidWlsZGVyLmlzRW1wdHkoKSA/ICIiIDogIiwgIiwgZG9tYWluLnN0
cmluZygpLCAiKGFsbCBidXQgY29va2llcykiKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQpAQCAtNDYyLDE4ICszNDk1
LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChj
b25zdCBTdHJpbmcmIGV2ZW50KQogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9y
ZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlk
Q3JlYXRlTmV0d29ya1Byb2Nlc3MoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwpAQCAtNTQyLDYgKzM1NjMsNTE4IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzaG91bGRFeGVtcHRGcm9tV2Vic2l0ZURhdGFEZWxldGlvbihjb25zdCBSZWdpCiAgICAgcmV0
dXJuICFkb21haW4uaXNFbXB0eSgpICYmIChkb21haW4gPT0gbV9zdGFuZGFsb25lQXBwbGljYXRp
b25Eb21haW4gfHwgbV9hcHBCb3VuZERvbWFpbnMuY29udGFpbnMoZG9tYWluKSk7CiB9CiAKKy8v
IFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQuCisKK1ByaXZhdGVDbGlja01lYXN1cmVtZW50IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YnVpbGRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEZy
b21EYXRhYmFzZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIHN0YXRlbWVudCwgUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGUgYXR0cmlidXRpb25UeXBlKQoreworICAgIGF1
dG8gc291cmNlU2l0ZURvbWFpbiA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChzdGF0ZW1l
bnQtPmNvbHVtbkludCgwKSk7CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW4gPSBnZXRE
b21haW5TdHJpbmdGcm9tRG9tYWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAgIGF1
dG8gc291cmNlSUQgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCgyKTsKKyAgICBhdXRvIHRpbWVPZkFk
Q2xpY2sgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1
dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSg1KSA6IHN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDMpOworICAgIGF1dG8gdG9rZW4gPSBhdHRyaWJ1dGlvblR5cGUg
PT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBz
dGF0ZW1lbnQtPmNvbHVtblRleHQoNykgOiBzdGF0ZW1lbnQtPmNvbHVtblRleHQoNCk7CisgICAg
YXV0byBzaWduYXR1cmUgPSBhdHRyaWJ1dGlvblR5cGUgPT0gUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQgPyBzdGF0ZW1lbnQtPmNvbHVtblRleHQoOCkg
OiBzdGF0ZW1lbnQtPmNvbHVtblRleHQoNSk7CisgICAgYXV0byBrZXlJRCA9IGF0dHJpYnV0aW9u
VHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRl
ZCA/IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg5KSA6IHN0YXRlbWVudC0+Y29sdW1uVGV4dCg2KTsK
KworICAgIFByaXZhdGVDbGlja01lYXN1cmVtZW50IGF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpTb3VyY2VJRChzb3VyY2VJRCksIFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50OjpTb3VyY2VTaXRlKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRD
cmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc291cmNlU2l0ZURvbWFpbikpLCBXZWJD
b3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25EZXN0aW5hdGlvblNpdGUo
UmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0
cmluZyhkZXN0aW5hdGlvblNpdGVEb21haW4pKSwgeyB9LCB7IH0sIFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyh0aW1lT2ZBZENsaWNrKSk7CisgICAgCisgICAgaWYgKGF0dHJpYnV0aW9uVHlwZSA9
PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkgewor
ICAgICAgICBhdXRvIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEgPSBzdGF0ZW1lbnQtPmNvbHVtbklu
dCgzKTsKKyAgICAgICAgYXV0byBwcmlvcml0eSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDQpOwor
ICAgICAgICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID0gc3RhdGVtZW50LT5j
b2x1bW5Eb3VibGUoNik7CisgICAgICAgIGF1dG8gZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1Nl
bmRWYWx1ZSA9IHN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDEwKTsKKworICAgICAgICBpZiAoYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSAhPSAtMSkKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uLnNldEF0
dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRy
aWdnZXJEYXRhIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEp
LCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6UHJpb3JpdHkocHJpb3JpdHkpIH0p
OworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IHNvdXJjZUVhcmxpZXN0VGltZVRv
U2VuZDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxXYWxsVGltZT4gZGVzdGluYXRpb25FYXJsaWVz
dFRpbWVUb1NlbmQ7CisgICAgICAgIAorICAgICAgICAvLyBBIHZhbHVlIG9mIDAuMCBpbmRpY2F0
ZXMgdGhhdCB0aGUgcmVwb3J0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHJlc3BlY3RpdmUgc2l0ZS4K
KyAgICAgICAgaWYgKHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlID4gMC4wKQorICAgICAg
ICAgICAgc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRz
KHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZFZhbHVlKTsKKworICAgICAgICBpZiAoZGVzdGluYXRp
b25FYXJsaWVzdFRpbWVUb1NlbmRWYWx1ZSA+IDAuMCkKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRlc3RpbmF0aW9u
RWFybGllc3RUaW1lVG9TZW5kVmFsdWUpOworCisgICAgICAgIGF0dHJpYnV0aW9uLnNldFRpbWVz
VG9TZW5kKHsgc291cmNlRWFybGllc3RUaW1lVG9TZW5kLCBkZXN0aW5hdGlvbkVhcmxpZXN0VGlt
ZVRvU2VuZCB9KTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGlvbi5zZXRTb3VyY2VTZWNyZXRUb2tl
bih7IHRva2VuLCBzaWduYXR1cmUsIGtleUlEIH0pOworCisgICAgcmV0dXJuIGF0dHJpYnV0aW9u
OworfQorCitzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudD4sIHN0ZDo6b3B0aW9uYWw8QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50Pj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNpdGUm
IHNvdXJjZVNpdGUsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYgZGVzdGluYXRpb25TaXRlKQoreworICAgIGF1dG8gc291
cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoc291cmNlU2l0ZS5yZWdpc3RyYWJsZURvbWFpbik7
CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW5JRCA9IGRvbWFpbklEKGRlc3RpbmF0aW9u
U2l0ZS5yZWdpc3RyYWJsZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZVNpdGVEb21haW5JRCB8
fCAhZGVzdGluYXRpb25TaXRlRG9tYWluSUQpCisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICBhdXRvIGZpbmRVbmF0dHJpYnV0
ZWRTY29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9maW5kVW5hdHRyaWJ1
dGVkU3RhdGVtZW50LCBmaW5kVW5hdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQiX3MpOworICAgIGlmICghZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudAor
ICAgICAgICB8fCBmaW5kVW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDEsICpz
b3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBmaW5kVW5hdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkg
IT0gU1FMSVRFX09LKSB7CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25J
RCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQgZmluZFVuYXR0cmlidXRlZFF1ZXJ5LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRF
X0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBhdXRvIGZpbmRBdHRyaWJ1dGVkU2Nv
cGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fZmluZEF0dHJpYnV0ZWRTdGF0
ZW1lbnQsIGZpbmRBdHRyaWJ1dGVkUXVlcnksICJmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQi
X3MpOworICAgIGlmICghZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwg
ZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21h
aW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGZpbmRBdHRyaWJ1dGVkU2NvcGVkU3RhdGVt
ZW50LT5iaW5kSW50KDIsICpkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgZmluZEF0
dHJpYnV0ZWRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudD4gdW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ7CisgICAgaWYg
KGZpbmRVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICB1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IGJ1aWxkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRGcm9tRGF0YWJhc2UoZmluZFVuYXR0cmlidXRlZFNjb3BlZFN0YXRl
bWVudC5nZXQoKSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OlVuYXR0
cmlidXRlZCk7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudD4gYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50OworICAgIGlmIChmaW5k
QXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAg
IGF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCA9IGJ1aWxkUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRGcm9tRGF0YWJhc2UoZmluZEF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCks
IFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKKwor
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcih1bmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCwgYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omluc2VydFByaXZhdGVDbGlja01lYXN1cmVtZW50KFBy
aXZhdGVDbGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXR0cmlidXRpb25UeXBlIGF0dHJpYnV0aW9uVHlwZSkKK3sKKyAgICBhdXRvIHRyYW5zYWN0
aW9uU2NvcGUgPSBiZWdpblRyYW5zYWN0aW9uSWZOZWNlc3NhcnkoKTsKKworICAgIGF1dG8gc291
cmNlRGF0YSA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGF0
dHJpYnV0aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgYXV0byBhdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uRGF0YSA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJlZ2lzdHJhYmxlRG9t
YWluKTsKKworICAgIGlmICghc291cmNlRGF0YS5zZWNvbmQgfHwgIWF0dHJpYnV0aW9uRGVzdGlu
YXRpb25EYXRhLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgc291cmNlVW5s
aW5rYWJsZVRva2VuID0gYXR0cmlidXRpb24uc291cmNlVW5saW5rYWJsZVRva2VuKCk7CisgICAg
aWYgKGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9u
VHlwZTo6QXR0cmlidXRlZCkgeworICAgICAgICBhdXRvIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEg
PSBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkgPyBhdHRyaWJ1dGlvbi5hdHRy
aWJ1dGlvblRyaWdnZXJEYXRhKCkudmFsdWUoKS5kYXRhIDogLTE7CisgICAgICAgIGF1dG8gcHJp
b3JpdHkgPSBhdHRyaWJ1dGlvbi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkgPyBhdHRyaWJ1dGlv
bi5hdHRyaWJ1dGlvblRyaWdnZXJEYXRhKCkudmFsdWUoKS5wcmlvcml0eSA6IC0xOworICAgICAg
ICBhdXRvIHNvdXJjZUVhcmxpZXN0VGltZVRvU2VuZCA9IGF0dHJpYnV0aW9uLnRpbWVzVG9TZW5k
KCkuc291cmNlRWFybGllc3RUaW1lVG9TZW5kID8gYXR0cmlidXRpb24udGltZXNUb1NlbmQoKS5z
b3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQudmFsdWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkgOiAtMTsKKyAgICAgICAgYXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IGF0
dHJpYnV0aW9uLnRpbWVzVG9TZW5kKCkuZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPyBh
dHRyaWJ1dGlvbi50aW1lc1RvU2VuZCgpLmRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kLnZh
bHVlKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpIDogLTE7CisKKyAgICAgICAgLy8gV2Ug
c2hvdWxkIG5ldmVyIGJlIGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHByaXZhdGUgY2xpY2sgbWVh
c3VyZW1lbnQgdmFsdWUgaW50byB0aGUgZGF0YWJhc2Ugd2l0aG91dCB2YWxpZCByZXBvcnQgdGlt
ZXMuCisgICAgICAgIEFTU0VSVChzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEgJiYgZGVz
dGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgIT0gLTEpOworCisgICAgICAgIGF1dG8gc3RhdGVt
ZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KGluc2VydEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFF1ZXJ5KTsKKyAgICAgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAg
ICAgIHx8IHN0YXRlbWVudC0+YmluZEludCgxLCAqc291cmNlRGF0YS5zZWNvbmQpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDIsICphdHRyaWJ1dGlvbkRl
c3RpbmF0aW9uRGF0YS5zZWNvbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVt
ZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNvdXJjZUlEKCkuaWQpICE9IFNRTElURV9PSwor
ICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDQsIGF0dHJpYnV0aW9uVHJpZ2dlckRh
dGEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDUsIHBy
aW9yaXR5KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJs
ZSg2LCBhdHRyaWJ1dGlvbi50aW1lT2ZBZENsaWNrKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZERvdWJsZSg3
LCBzb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwg
c3RhdGVtZW50LT5iaW5kVGV4dCg4LCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxp
bmthYmxlVG9rZW4tPnRva2VuQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0KDksIHNvdXJjZVVubGlua2FibGVU
b2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlT
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDEwLCBzb3VyY2VVbmxpbmthYmxlVG9rZW4gPyBzb3VyY2VVbmxpbmthYmxlVG9rZW4tPmtleUlE
QmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBz
dGF0ZW1lbnQtPmJpbmREb3VibGUoMTEsIGRlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IHN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnQgaW5zZXJ0QXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksIGVycm9y
IG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBzdGF0ZW1lbnQgPSBtX2RhdGFiYXNl
LnByZXBhcmVTdGF0ZW1lbnQoaW5zZXJ0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRRdWVyeSk7CisgICAgaWYgKCFzdGF0ZW1lbnQKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VEYXRhLnNlY29uZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRl
bWVudC0+YmluZEludCgyLCAqYXR0cmlidXRpb25EZXN0aW5hdGlvbkRhdGEuc2Vjb25kKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LT5iaW5kSW50KDMsIGF0dHJpYnV0aW9uLnNv
dXJjZUlEKCkuaWQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJpbmREb3Vi
bGUoNCwgYXR0cmlidXRpb24udGltZU9mQWRDbGljaygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC0+YmluZFRleHQoNSwgc291
cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNlVW5saW5rYWJsZVRva2VuLT50b2tlbkJhc2U2NFVS
TCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPmJp
bmRUZXh0KDYsIHNvdXJjZVVubGlua2FibGVUb2tlbiA/IHNvdXJjZVVubGlua2FibGVUb2tlbi0+
c2lnbmF0dXJlQmFzZTY0VVJMIDogZW1wdHlTdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IHN0YXRlbWVudC0+YmluZFRleHQoNywgc291cmNlVW5saW5rYWJsZVRva2VuID8gc291cmNl
VW5saW5rYWJsZVRva2VuLT5rZXlJREJhc2U2NFVSTCA6IGVtcHR5U3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5zZXJ0UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgaW5zZXJ0VW5h
dHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgZXJyb3IgbWVzc2FnZTogJSIg
UFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bWFya0FsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVt
ZW50QXNFeHBpcmVkRm9yVGVzdGluZygpCit7CisgICAgYXV0byBzY29wZWRTdGF0ZW1lbnQgPSB0
aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9zZXRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEFzRXhwaXJlZFN0YXRlbWVudCwgc2V0VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3Vy
ZW1lbnRBc0V4cGlyZWRRdWVyeSwgIm1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEFzRXhwaXJlZEZvclRlc3RpbmciX3MpOworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1l
bnQgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
SVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1hcmtBbGxVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEFz
RXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
bW92ZVVuYXR0cmlidXRlZChQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYgYXR0cmlidXRpb24pCit7
CisgICAgYXV0byBzb3VyY2VTaXRlRG9tYWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5zb3Vy
Y2VTaXRlKCkucmVnaXN0cmFibGVEb21haW4pOworICAgIGF1dG8gZGVzdGluYXRpb25TaXRlRG9t
YWluSUQgPSBkb21haW5JRChhdHRyaWJ1dGlvbi5kZXN0aW5hdGlvblNpdGUoKS5yZWdpc3RyYWJs
ZURvbWFpbik7CisKKyAgICBpZiAoIXNvdXJjZVNpdGVEb21haW5JRCB8fCAhZGVzdGluYXRpb25T
aXRlRG9tYWluSUQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhdXRvIHNjb3BlZFN0YXRl
bWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX3JlbW92ZVVuYXR0cmlidXRlZFN0YXRlbWVu
dCwgcmVtb3ZlVW5hdHRyaWJ1dGVkUXVlcnksICJyZW1vdmVVbmF0dHJpYnV0ZWQiX3MpOworCisg
ICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5iaW5k
SW50KDEsICpzb3VyY2VTaXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzY29w
ZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMiwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZVVuYXR0cmlidXRlZCwgZXJyb3IgbWVzc2Fn
ZTogJSIgUFJJVkFURV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGQ6Om9wdGlv
bmFsPFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblNlY29uZHNVbnRpbFNlbmRE
YXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmF0dHJpYnV0ZVByaXZhdGVDbGlja01l
YXN1cmVtZW50KGNvbnN0IFNvdXJjZVNpdGUmIHNvdXJjZVNpdGUsIGNvbnN0IEF0dHJpYnV0aW9u
RGVzdGluYXRpb25TaXRlJiBkZXN0aW5hdGlvblNpdGUsIEF0dHJpYnV0aW9uVHJpZ2dlckRhdGEm
JiBhdHRyaWJ1dGlvblRyaWdnZXJEYXRhKQoreworICAgIC8vIFdlIHNob3VsZCBhbHdheXMgY2xl
YXIgZXhwaXJlZCBjbGlja3MgZnJvbSB0aGUgZGF0YWJhc2UgYmVmb3JlIHNjaGVkdWxpbmcgYW4g
YXR0cmlidXRpb24uCisgICAgY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoKTsK
KworICAgIGlmICghYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
TE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gaW52YWxpZCBhdHRyaWJ1
dGlvbi4iKTsKKyAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJb
UHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGludmFsaWQgYXR0cmlidXRpb24uIl9z
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KKworICAg
IGF1dG8gZGF0YSA9IGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEuZGF0YTsKKyAgICBhdXRvIHByaW9y
aXR5ID0gYXR0cmlidXRpb25UcmlnZ2VyRGF0YS5wcmlvcml0eTsKKworICAgIGlmIChVTkxJS0VM
WShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQsICJHb3QgYW4gYXR0cmlidXRpb24gd2l0aCBhdHRyaWJ1dGlvbiB0
cmlnZ2VyIGRhdGE6ICV7cHVibGljfXUgYW5kIHByaW9yaXR5OiAle3B1YmxpY311LiIsIGRhdGEs
IHByaW9yaXR5KTsKKyAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCwgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtl
U3RyaW5nKCJbUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudF0gR290IGFuIGF0dHJpYnV0aW9uIHdp
dGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9zLCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6
ICciX3MsIHByaW9yaXR5LCAiJy4iX3MpKTsKKyAgICB9CisKKyAgICBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YSBzZWNvbmRzVW50aWxTZW5k
IHsgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQgfTsKKworICAgIGF1dG8gYXR0cmlidXRpb24g
PSBmaW5kUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQoc291cmNlU2l0ZSwgZGVzdGluYXRpb25TaXRl
KTsKKyAgICBhdXRvJiBwcmV2aW91c2x5VW5hdHRyaWJ1dGVkID0gYXR0cmlidXRpb24uZmlyc3Q7
CisgICAgYXV0byYgcHJldmlvdXNseUF0dHJpYnV0ZWQgPSBhdHRyaWJ1dGlvbi5zZWNvbmQ7CisK
KyAgICBpZiAocHJldmlvdXNseVVuYXR0cmlidXRlZCkgeworICAgICAgICAvLyBBbHdheXMgY29u
dmVydCB0aGUgcGVuZGluZyBhdHRyaWJ1dGlvbiBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIHVuYXR0
cmlidXRlZCBtYXAuCisgICAgICAgIHJlbW92ZVVuYXR0cmlidXRlZCgqcHJldmlvdXNseVVuYXR0
cmlidXRlZCk7CisgICAgICAgIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91c2x5VW5hdHRyaWJ1
dGVkLnZhbHVlKCkuYXR0cmlidXRlQW5kR2V0RWFybGllc3RUaW1lVG9TZW5kKFdURk1vdmUoYXR0
cmlidXRpb25UcmlnZ2VyRGF0YSkpOworCisgICAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgaGF2
ZSBhIHZhbGlkIHNlY29uZHNVbnRpbFNlbmQgdmFsdWUgZm9yIGEgcHJldmlvdXNseVVuYXR0cmli
dXRlZCB2YWx1ZSBiZWNhdXNlIHRoZXJlIGNhbiBiZSBubyBwcmV2aW91cyBhdHRyaWJ1dGlvbiB3
aXRoIGEgaGlnaGVyIHByaW9yaXR5LgorICAgICAgICBpZiAoIXNlY29uZHNVbnRpbFNlbmQuaGFz
VmFsaWRTZWNvbmRzVW50aWxTZW5kVmFsdWVzKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z01vZGVFbmFibGVkKCkpKSB7CisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiQ29udmVydGVkIGEg
c3RvcmVkIGFkIGNsaWNrIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1YmxpY311
IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dS4iLCBkYXRhLCBwcmlvcml0eSk7CisgICAgICAgICAg
ICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZhdGVDbGlj
a01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2YXRlIENs
aWNrIE1lYXN1cmVtZW50XSBDb252ZXJ0ZWQgYSBzdG9yZWQgYWQgY2xpY2sgd2l0aCBhdHRyaWJ1
dGlvbiB0cmlnZ2VyIGRhdGE6ICciX3MsIGRhdGEsICInIGFuZCBwcmlvcml0eTogJyJfcywgcHJp
b3JpdHksICInLiJfcykpOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8g
cHJldmlvdXMgYXR0cmlidXRpb24sIG9yIHRoZSBuZXcgYXR0cmlidXRpb24gaGFzIGhpZ2hlciBw
cmlvcml0eSwgaW5zZXJ0L3VwZGF0ZSB0aGUgZGF0YWJhc2UuCisgICAgICAgIGlmICghcHJldmlv
dXNseUF0dHJpYnV0ZWQgfHwgcHJldmlvdXNseVVuYXR0cmlidXRlZC52YWx1ZSgpLmhhc0hpZ2hl
clByaW9yaXR5VGhhbigqcHJldmlvdXNseUF0dHJpYnV0ZWQpKSB7CisgICAgICAgICAgICBpbnNl
cnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5VW5hdHRyaWJ1dGVk
KSwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlvblR5cGU6OkF0dHJpYnV0ZWQpOwor
CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdNb2RlRW5hYmxlZCgpKSkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsICJSZXBs
YWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFkIGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGgg
YXR0cmlidXRpb24gZGF0YTogJXtwdWJsaWN9dSBhbmQgcHJpb3JpdHk6ICV7cHVibGljfXUgYmVj
YXVzZSBpdCBoYWQgaGlnaGVyIHByaW9yaXR5LiIsIGRhdGEsIHByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50LCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltQcml2
YXRlIENsaWNrIE1lYXN1cmVtZW50XSBSZXBsYWNlZCBhIHByZXZpb3VzbHkgY29udmVydGVkIGFk
IGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAnIl9z
LCBkYXRhLCAiJyBhbmQgcHJpb3JpdHk6ICciX3MsIHByaW9yaXR5LCAiJyBiZWNhdXNlIGl0IGhh
ZCBoaWdoZXIgcHJpb3JpdHkuIl9zKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKHByZXZpb3VzbHlBdHRyaWJ1dGVkKSB7CisgICAgICAgIC8vIElmIHdlIGhhdmUg
bm8gbmV3IGF0dHJpYnV0aW9uLCByZS1hdHRyaWJ1dGUgdGhlIG9sZCBvbmUgdG8gcmVzcGVjdCB0
aGUgbmV3IHByaW9yaXR5LCBidXQgb25seSBpZiB0aGlzIHJlcG9ydCBoYXMKKyAgICAgICAgLy8g
bm90IGJlZW4gc2VudCB0byB0aGUgc291cmNlIG9yIGRlc3RpbmF0aW9uIHNpdGUgeWV0LgorICAg
ICAgICBpZiAoIXByZXZpb3VzbHlBdHRyaWJ1dGVkLnZhbHVlKCkuaGFzUHJldmlvdXNseUJlZW5S
ZXBvcnRlZCgpKSB7CisgICAgICAgICAgICBhdXRvIHNlY29uZHNVbnRpbFNlbmQgPSBwcmV2aW91
c2x5QXR0cmlidXRlZC52YWx1ZSgpLmF0dHJpYnV0ZUFuZEdldEVhcmxpZXN0VGltZVRvU2VuZChX
VEZNb3ZlKGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEpKTsKKyAgICAgICAgICAgIGlmICghc2Vjb25k
c1VudGlsU2VuZC5oYXNWYWxpZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgICAgICAgICBpbnNlcnRQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudChXVEZNb3ZlKCpwcmV2aW91c2x5QXR0cmlidXRlZCksIFByaXZhdGVDbGlj
a01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKTsKKworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKGRlYnVnTW9kZUVuYWJsZWQoKSkpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19JTkZPKFByaXZhdGVDbGlja01lYXN1cmVtZW50LCAiUmUtY29udmVydGVkIGFuIGFk
IGNsaWNrIHdpdGggYSBuZXcgb25lIHdpdGggYXR0cmlidXRpb24gdHJpZ2dlciBkYXRhOiAle3B1
YmxpY311IGFuZCBwcmlvcml0eTogJXtwdWJsaWN9dSBiZWNhdXNlIGl0IGhhZCBoaWdoZXIgcHJp
b3JpdHkuIiwgZGF0YSwgcHJpb3JpdHkpOworICAgICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIE1l
c3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiW1ByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnRd
IFJlLWNvbnZlcnRlZCBhbiBhZCBjbGljayB3aXRoIGEgbmV3IG9uZSB3aXRoIGF0dHJpYnV0aW9u
IHRyaWdnZXIgZGF0YTogJyJfcywgZGF0YSwgIicgYW5kIHByaW9yaXR5OiAnIl9zLCBwcmlvcml0
eSwgIicnIGJlY2F1c2UgaXQgaGFkIGhpZ2hlciBwcmlvcml0eS4iX3MpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghc2Vjb25kc1VudGlsU2VuZC5oYXNWYWxp
ZFNlY29uZHNVbnRpbFNlbmRWYWx1ZXMoKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
KworICAgIHJldHVybiBzZWNvbmRzVW50aWxTZW5kOworfQorCitWZWN0b3I8V2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YWxsQXR0
cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KCkKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZWRT
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9hbGxBdHRyaWJ1dGVkUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudFF1ZXJ5LCAicHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRUb1N0cmluZyJfcyk7CisK
KyAgICBpZiAoIWF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQpIHsKKyAgICAgICAgSVRQX1JFTEVB
U0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBS
SVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFZlY3RvcjxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4gYXR0cmlidXRpb25z
OworICAgIHdoaWxlIChhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgYXR0cmlidXRpb25zLmFwcGVuZChidWlsZFByaXZhdGVDbGlja01lYXN1
cmVtZW50RnJvbURhdGFiYXNlKGF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQuZ2V0KCksIFByaXZh
dGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlOjpBdHRyaWJ1dGVkKSk7CisKKyAgICBy
ZXR1cm4gYXR0cmlidXRpb25zOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxl
RG9tYWluPiBkb21haW4pCit7CisgICAgLy8gRGVmYXVsdCB0byBjbGVhciBhbGwgZW50cmllcyBp
ZiBubyBkb21haW4gaXMgc3BlY2lmaWVkLgorICAgIFN0cmluZyBiaW5kUGFyYW1ldGVyID0gIiUi
OworICAgIGlmIChkb21haW4pIHsKKyAgICAgICAgYXV0byBkb21haW5JRFRvTWF0Y2ggPSBkb21h
aW5JRCgqZG9tYWluKTsKKyAgICAgICAgaWYgKCFkb21haW5JRFRvTWF0Y2gpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYmluZFBhcmFtZXRlciA9IFN0cmluZzo6bnVtYmVyKCpkb21h
aW5JRFRvTWF0Y2gpOworICAgIH0KKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2lu
VHJhbnNhY3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byBjbGVhclVuYXR0cmlidXRlZFNj
b3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVudChtX2NsZWFyVW5hdHRyaWJ1dGVk
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQsIGNsZWFyVW5hdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRRdWVyeSwgImNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3Mp
OworCisgICAgaWYgKCFjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudAorICAgICAgICB8
fCBjbGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgYmluZFBhcmFt
ZXRlcikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGNsZWFyVW5hdHRyaWJ1dGVkU2NvcGVkU3Rh
dGVtZW50LT5iaW5kVGV4dCgyLCBiaW5kUGFyYW1ldGVyKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgY2xlYXJVbmF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBj
bGVhclVuYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudCwgZXJyb3IgbWVzc2FnZTogJSIgUFJJVkFU
RV9MT0dfU1RSSU5HLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgYXV0byBjbGVhckF0dHJpYnV0ZWRT
Y29wZWRTdGF0ZW1lbnQgPSB0aGlzLT5zY29wZWRTdGF0ZW1lbnQobV9jbGVhckF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudCwgY2xlYXJBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSwgImNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQiX3MpOwor
CisgICAgaWYgKCFjbGVhckF0dHJpYnV0ZWRTY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgY2xl
YXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBiaW5kUGFyYW1ldGVyKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJBdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBiaW5kUGFyYW1ldGVyKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgY2xlYXJB
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgSVRQX1JFTEVBU0VfTE9HX0VSUk9SKG1fc2Vzc2lvbklELCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgY2xlYXJBdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50LCBlcnJvciBtZXNzYWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpj
bGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpCit7CisgICAgYXV0byBleHBpcmF0
aW9uVGltZUZyYW1lID0gV2FsbFRpbWU6Om5vdygpIC0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ6Om1heEFnZSgpOworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1l
bnQsIGNsZWFyRXhwaXJlZFByaXZhdGVDbGlja01lYXN1cmVtZW50UXVlcnksICJjbGVhckV4cGly
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCJfcyk7CisKKyAgICBpZiAoIXNjb3BlZFN0YXRlbWVu
dAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgZXhwaXJhdGlvblRp
bWVGcmFtZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQsIGVycm9yIG1l
c3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworU3RyaW5n
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6YXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQqIHN0YXRlbWVudCwgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRy
aWJ1dGlvblR5cGUgYXR0cmlidXRpb25UeXBlKQoreworICAgIGF1dG8gc291cmNlU2l0ZURvbWFp
biA9IGdldERvbWFpblN0cmluZ0Zyb21Eb21haW5JRChzdGF0ZW1lbnQtPmNvbHVtbkludCgwKSk7
CisgICAgYXV0byBkZXN0aW5hdGlvblNpdGVEb21haW4gPSBnZXREb21haW5TdHJpbmdGcm9tRG9t
YWluSUQoc3RhdGVtZW50LT5jb2x1bW5JbnQoMSkpOworICAgIGF1dG8gc291cmNlSUQgPSBzdGF0
ZW1lbnQtPmNvbHVtbkludCgyKTsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiU291cmNlIHNpdGU6ICIsIHNvdXJjZVNpdGVEb21haW4sICJcbkF0dHJp
YnV0ZSBvbiBzaXRlOiAiLCBkZXN0aW5hdGlvblNpdGVEb21haW4sICJcblNvdXJjZSBJRDogIiwg
c291cmNlSUQpOworCisgICAgaWYgKGF0dHJpYnV0aW9uVHlwZSA9PSBQcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkgeworICAgICAgICBhdXRvIGF0dHJp
YnV0aW9uVHJpZ2dlckRhdGEgPSBzdGF0ZW1lbnQtPmNvbHVtbkludCgzKTsKKyAgICAgICAgYXV0
byBwcmlvcml0eSA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDQpOworICAgICAgICBhdXRvIGVhcmxp
ZXN0VGltZVRvU2VuZCA9IHN0YXRlbWVudC0+Y29sdW1uSW50KDYpOworCisgICAgICAgIGlmIChh
dHRyaWJ1dGlvblRyaWdnZXJEYXRhICE9IC0xKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiXG5BdHRyaWJ1dGlvbiB0cmlnZ2VyIGRhdGE6ICIsIGF0dHJpYnV0aW9uVHJpZ2dlckRhdGEs
ICJcbkF0dHJpYnV0aW9uIHByaW9yaXR5OiAiLCBwcmlvcml0eSwgIlxuQXR0cmlidXRpb24gZWFy
bGllc3QgdGltZSB0byBzZW5kOiAiKTsKKyAgICAgICAgICAgIGlmIChlYXJsaWVzdFRpbWVUb1Nl
bmQgPT0gLTEpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIk5vdCBzZXQiKTsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kc1VudGlsU2VuZCA9
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlYXJsaWVzdFRpbWVUb1NlbmQpIC0gV2FsbFRpbWU6
Om5vdygpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKChzZWNvbmRzVW50aWxTZW5k
ID49IDI0X2ggJiYgc2Vjb25kc1VudGlsU2VuZCA8PSA0OF9oKSA/ICJXaXRoaW4gMjQtNDggaG91
cnMiIDogIk91dHNpZGUgMjQtNDggaG91cnMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG5ObyBhdHRyaWJ1dGlvbiB0cmlnZ2Vy
IGRhdGEuIik7CisgICAgfSBlbHNlCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcbk5vIGF0dHJp
YnV0aW9uIHRyaWdnZXIgZGF0YS4iKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKworICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmcoKQoreworICAgIGF1
dG8gcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzID0gbV9kYXRhYmFzZS5wcmVwYXJl
U3RhdGVtZW50KCJTRUxFQ1QgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIFVuYXR0cmlidXRlZFByaXZh
dGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQxLCAoU0VMRUNUIENPVU5UKCopIEZST00gQXR0cmli
dXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50KSBhcyBjbnQyIl9zKTsKKyAgICBpZiAoIXByaXZh
dGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cyB8fCBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudERh
dGFFeGlzdHMtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRUb1N0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVf
TE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGlm
ICghcHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnREYXRhRXhpc3RzLT5jb2x1bW5JbnQoMCkgJiYgIXBy
aXZhdGVDbGlja01lYXN1cmVtZW50RGF0YUV4aXN0cy0+Y29sdW1uSW50KDEpKQorICAgICAgICBy
ZXR1cm4gIlxuTm8gc3RvcmVkIFByaXZhdGUgQ2xpY2sgTWVhc3VyZW1lbnQgZGF0YS5cbiJfczsK
KworICAgIGF1dG8gdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3Rh
dGVtZW50KG1fYWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBdHRyaWJ1dGlv
bnNTdGF0ZW1lbnQsIGFsbFVuYXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmli
dXRpb25zUXVlcnksICJwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nIl9zKTsKKworICAg
IGlmICghdW5hdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50KSB7CisgICAgICAgIElUUF9SRUxFQVNF
X0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAlIiBQUklW
QVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB1bmF0dHJpYnV0
ZWROdW1iZXIgPSAwOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICB3aGlsZSAodW5h
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAg
ICBjb25zdCBjaGFyKiBwcmVmaXggPSB1bmF0dHJpYnV0ZWROdW1iZXIgPyAiIiA6ICJVbmF0dHJp
YnV0ZWQgUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudHM6IjsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQocHJlZml4LCAiXG5XZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCAiLCArK3VuYXR0
cmlidXRlZE51bWJlciwgJ1xuJywKKyAgICAgICAgICAgIGF0dHJpYnV0aW9uVG9TdHJpbmcodW5h
dHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0
dHJpYnV0aW9uVHlwZTo6VW5hdHRyaWJ1dGVkKSk7CisgICAgfQorCisgICAgYXV0byBhdHRyaWJ1
dGVkU2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2NvcGVkU3RhdGVtZW50KG1fYWxsQXR0cmlidXRl
ZFByaXZhdGVDbGlja01lYXN1cmVtZW50U3RhdGVtZW50LCBhbGxBdHRyaWJ1dGVkUHJpdmF0ZUNs
aWNrTWVhc3VyZW1lbnRRdWVyeSwgInByaXZhdGVDbGlja01lYXN1cmVtZW50VG9TdHJpbmciX3Mp
OworCisgICAgaWYgKCFhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50KSB7CisgICAgICAgIElUUF9S
RUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nLCBlcnJvciBtZXNzYWdlOiAl
IiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVkTnVtYmVyID0gMDsKKyAgICB3aGlsZSAoYXR0cmlidXRlZFNjb3BlZFN0YXRlbWVudC0+
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVkTnVtYmVyKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodW5hdHRyaWJ1dGVkTnVtYmVyID8gIlxuIiA6ICIi
LCAiQXR0cmlidXRlZCBQcml2YXRlIENsaWNrIE1lYXN1cmVtZW50czoiKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIlxuV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgIiwgKythdHRy
aWJ1dGVkTnVtYmVyICsgdW5hdHRyaWJ1dGVkTnVtYmVyLCAnXG4nLAorICAgICAgICAgICAgYXR0
cmlidXRpb25Ub1N0cmluZyhhdHRyaWJ1dGVkU2NvcGVkU3RhdGVtZW50LmdldCgpLCBQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZTo6QXR0cmlidXRlZCkpOworICAgIH0KKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitzdGQ6OnBhaXI8c3RkOjpvcHRpb25h
bDxTb3VyY2VFYXJsaWVzdFRpbWVUb1NlbmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFy
bGllc3RUaW1lVG9TZW5kPj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjplYXJsaWVzdFRp
bWVzVG9TZW5kKGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50JiBhdHRyaWJ1
dGlvbikKK3sKKyAgICBhdXRvIHNvdXJjZVNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0
aW9uLnNvdXJjZVNpdGUoKS5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgYXV0byBkZXN0aW5hdGlv
blNpdGVEb21haW5JRCA9IGRvbWFpbklEKGF0dHJpYnV0aW9uLmRlc3RpbmF0aW9uU2l0ZSgpLnJl
Z2lzdHJhYmxlRG9tYWluKTsKKworICAgIGlmICghc291cmNlU2l0ZURvbWFpbklEIHx8ICFkZXN0
aW5hdGlvblNpdGVEb21haW5JRCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHN0ZDo6
bnVsbG9wdCwgc3RkOjpudWxsb3B0KTsKKworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhp
cy0+c2NvcGVkU3RhdGVtZW50KG1fZWFybGllc3RUaW1lc1RvU2VuZFN0YXRlbWVudCwgZWFybGll
c3RUaW1lc1RvU2VuZFF1ZXJ5LCAiZWFybGllc3RUaW1lc1RvU2VuZCJfcyk7CisKKyAgICBpZiAo
IXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJpbmRJbnQoMSwg
KnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRl
bWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25TaXRlRG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmVhcmxpZXN0VGltZXNUb1NlbmQsIGVycm9yIG1lc3NhZ2U6ICUiIFBVQkxJQ19MT0dfU1RS
SU5HLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxTb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmQ+IGVhcmxpZXN0VGltZVRvU2VuZFRvU291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8RGVzdGlu
YXRpb25FYXJsaWVzdFRpbWVUb1NlbmQ+IGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb247
CisgICAgCisgICAgLy8gQSB2YWx1ZSBvZiAwLjAgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcG9ydCBo
YXMgYmVlbiBzZW50IHRvIHRoZSByZXNwZWN0aXZlIHNpdGUuCisgICAgaWYgKHNjb3BlZFN0YXRl
bWVudC0+Y29sdW1uRG91YmxlKDApID4gMC4wKQorICAgICAgICBlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZSA9IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91YmxlKDApOworICAgIAorICAgIGlm
IChzY29wZWRTdGF0ZW1lbnQtPmNvbHVtbkRvdWJsZSgxKSA+IDAuMCkKKyAgICAgICAgZWFybGll
c3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbiA9IHNjb3BlZFN0YXRlbWVudC0+Y29sdW1uRG91Ymxl
KDEpOworICAgIAorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihlYXJsaWVzdFRpbWVUb1NlbmRU
b1NvdXJjZSwgZWFybGllc3RUaW1lVG9TZW5kVG9EZXN0aW5hdGlvbik7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXJrUmVwb3J0QXNTZW50VG9Tb3VyY2UoU291cmNl
RG9tYWluSUQgc291cmNlU2l0ZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFpbklEIGRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQoreworICAgIGF1dG8gc2NvcGVkU3RhdGVtZW50ID0gdGhpcy0+c2Nv
cGVkU3RhdGVtZW50KG1fbWFya1JlcG9ydEFzU2VudFRvU291cmNlU3RhdGVtZW50LCBtYXJrUmVw
b3J0QXNTZW50VG9Tb3VyY2VRdWVyeSwgIm1hcmtSZXBvcnRBc1NlbnRUb1NvdXJjZSJfcyk7CisK
KyAgICBpZiAoIXNjb3BlZFN0YXRlbWVudAorICAgICAgICB8fCBzY29wZWRTdGF0ZW1lbnQtPmJp
bmRJbnQoMSwgc291cmNlU2l0ZURvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc2Nv
cGVkU3RhdGVtZW50LT5iaW5kSW50KDIsIGRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWFya1JlcG9ydEFzU2VudFRvU291cmNlLCBlcnJvciBtZXNzYWdlOiAlIiBQ
VUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uKFNvdXJjZURvbWFpbklEIHNv
dXJjZVNpdGVEb21haW5JRCwgRGVzdGluYXRpb25Eb21haW5JRCBkZXN0aW5hdGlvblNpdGVEb21h
aW5JRCkKK3sKKyAgICBhdXRvIHNjb3BlZFN0YXRlbWVudCA9IHRoaXMtPnNjb3BlZFN0YXRlbWVu
dChtX21hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uU3RhdGVtZW50LCBtYXJrUmVwb3J0QXNT
ZW50VG9EZXN0aW5hdGlvblF1ZXJ5LCAibWFya1JlcG9ydEFzU2VudFRvRGVzdGluYXRpb24iX3Mp
OworCisgICAgaWYgKCFzY29wZWRTdGF0ZW1lbnQKKyAgICAgICAgfHwgc2NvcGVkU3RhdGVtZW50
LT5iaW5kSW50KDEsIHNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHNjb3BlZFN0YXRlbWVudC0+YmluZEludCgyLCBkZXN0aW5hdGlvblNpdGVEb21haW5JRCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHNjb3BlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9uLCBlcnJvciBtZXNz
YWdlOiAlIiBQVUJMSUNfTE9HX1NUUklORywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyU2VudEF0dHJpYnV0aW9uKFdlYkNvcmU6OlByaXZhdGVD
bGlja01lYXN1cmVtZW50JiYgYXR0cmlidXRpb24sIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50IGF0dHJpYnV0aW9uUmVwb3J0RW5kcG9pbnQpCit7Cisg
ICAgYXV0byB0aW1lc1RvU2VuZCA9IGVhcmxpZXN0VGltZXNUb1NlbmQoYXR0cmlidXRpb24pOwor
ICAgIGF1dG8gc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gdGltZXNUb1NlbmQuZmlyc3Q7Cisg
ICAgYXV0byBkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCA9IHRpbWVzVG9TZW5kLnNlY29u
ZDsKKworICAgIGF1dG8gc291cmNlU2l0ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24u
c291cmNlU2l0ZSgpLnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBhdXRvIGRlc3RpbmF0aW9uU2l0
ZURvbWFpbklEID0gZG9tYWluSUQoYXR0cmlidXRpb24uZGVzdGluYXRpb25TaXRlKCkucmVnaXN0
cmFibGVEb21haW4pOworCisgICAgaWYgKCFzb3VyY2VTaXRlRG9tYWluSUQgfHwgIWRlc3RpbmF0
aW9uU2l0ZURvbWFpbklEKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGF0dHJpYnV0
aW9uUmVwb3J0RW5kcG9pbnQpIHsKKyAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpB
dHRyaWJ1dGlvblJlcG9ydEVuZHBvaW50OjpTb3VyY2U6CisgICAgICAgIGlmICghc291cmNlRWFy
bGllc3RUaW1lVG9TZW5kKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYXJrUmVwb3J0QXNTZW50VG9T
b3VyY2UoKnNvdXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKKyAg
ICAgICAgc291cmNlRWFybGllc3RUaW1lVG9TZW5kID0gc3RkOjpudWxsb3B0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblJlcG9y
dEVuZHBvaW50OjpEZXN0aW5hdGlvbjoKKyAgICAgICAgaWYgKCFkZXN0aW5hdGlvbkVhcmxpZXN0
VGltZVRvU2VuZCkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbWFya1JlcG9ydEFzU2VudFRvRGVzdGlu
YXRpb24oKnNvdXJjZVNpdGVEb21haW5JRCwgKmRlc3RpbmF0aW9uU2l0ZURvbWFpbklEKTsKKyAg
ICAgICAgZGVzdGluYXRpb25FYXJsaWVzdFRpbWVUb1NlbmQgPSBzdGQ6Om51bGxvcHQ7CisgICAg
fQorCisgICAgLy8gRG9uJ3QgY2xlYXIgdGhlIGF0dHJpYnV0ZSBmcm9tIHRoZSBkYXRhYmFzZSB1
bmxlc3MgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgYm90aCB0byB0aGUgc291cmNlIGFuZCBkZXN0aW5h
dGlvbiBzaXRlLgorICAgIGlmIChkZXN0aW5hdGlvbkVhcmxpZXN0VGltZVRvU2VuZCB8fCBzb3Vy
Y2VFYXJsaWVzdFRpbWVUb1NlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY2xlYXJB
dHRyaWJ1dGVkU3RhdGVtZW50ID0gbV9kYXRhYmFzZS5wcmVwYXJlU3RhdGVtZW50KCJERUxFVEUg
RlJPTSBBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgV0hFUkUgc291cmNlU2l0ZURv
bWFpbklEID0gPyBBTkQgZGVzdGluYXRpb25TaXRlRG9tYWluSUQgPSA/Il9zKTsKKyAgICBpZiAo
IWNsZWFyQXR0cmlidXRlZFN0YXRlbWVudAorICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQtPmJpbmRJbnQoMSwgKnNvdXJjZVNpdGVEb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IGNsZWFyQXR0cmlidXRlZFN0YXRlbWVudC0+YmluZEludCgyLCAqZGVzdGluYXRpb25T
aXRlRG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBjbGVhckF0dHJpYnV0ZWRTdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0df
RVJST1IobV9zZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJTZW50QXR0cmlidXRpb24gZmFpbGVkIHRvIHN0ZXAsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZB
VEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1hcmtBdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRzQXNFeHBp
cmVkRm9yVGVzdGluZygpCit7CisgICAgYXV0byBleHBpcmVkVGltZVRvU2VuZCA9IFdhbGxUaW1l
Ojpub3coKSAtIDFfaDsKKworICAgIGF1dG8gdHJhbnNhY3Rpb25TY29wZSA9IGJlZ2luVHJhbnNh
Y3Rpb25JZk5lY2Vzc2FyeSgpOworCisgICAgYXV0byBlYXJsaWVzdFRpbWVUb1NlbmRUb1NvdXJj
ZVN0YXRlbWVudCA9IG1fZGF0YWJhc2UucHJlcGFyZVN0YXRlbWVudCgiVVBEQVRFIEF0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCBTRVQgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2Ug
PSA/Il9zKTsKKyAgICBhdXRvIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1l
bnQgPSBtX2RhdGFiYXNlLnByZXBhcmVTdGF0ZW1lbnQoIlVQREFURSBBdHRyaWJ1dGVkUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnQgU0VUIGVhcmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb24gPSBu
dWxsIl9zKTsKKworICAgIGlmICghZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQK
KyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQo
MSwgZXhwaXJlZFRpbWVUb1NlbmQuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgZWFybGllc3RUaW1lVG9TZW5kVG9Tb3VyY2VTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWFya0F0dHJpYnV0
ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudHNBc0V4cGlyZWRGb3JUZXN0aW5nLCBlcnJvciBtZXNz
YWdlOiAlIiBQUklWQVRFX0xPR19TVFJJTkcsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWVh
cmxpZXN0VGltZVRvU2VuZFRvRGVzdGluYXRpb25TdGF0ZW1lbnQgfHwgZWFybGllc3RUaW1lVG9T
ZW5kVG9EZXN0aW5hdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgIElUUF9SRUxFQVNFX0xPR19FUlJPUihtX3Nlc3Npb25JRCwgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0Fz
RXhwaXJlZEZvclRlc3RpbmcsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworU2NvcGVFeGl0PEZ1bmN0aW9uPHZvaWQoKT4+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6YmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCkKK3sKKyAg
ICBpZiAobV90cmFuc2FjdGlvbi5pblByb2dyZXNzKCkpCisgICAgICAgIHJldHVybiBtYWtlU2Nv
cGVFeGl0KEZ1bmN0aW9uPHZvaWQoKT4geyBbXSB7IH0gfSk7CisKKyAgICBtX3RyYW5zYWN0aW9u
LmJlZ2luKCk7CisgICAgcmV0dXJuIG1ha2VTY29wZUV4aXQoRnVuY3Rpb248dm9pZCgpPiB7IFt0
aGlzXSB7CisgICAgICAgIG1fdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgfSB9KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyN1bmRlZiBJVFBfUkVMRUFTRV9MT0cKKyN1bmRlZiBJ
VFBfUkVMRUFTRV9MT0dfRVJST1IKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgKaW5kZXggMjQyMmZjODRmNTRlZTdjZDMwZWU0MGYxNDIwNDJkNDFlYmY1
MWIzZi4uZDAyYzc0NTk1NmY3OGVhYmFkNWZlZjZmYzk2NzM0YWY2YTBiYzY0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjIgKzI3LDI2IEBACiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCisjaW5jbHVkZSAiT3BlcmF0aW5nRGF0ZS5o
IgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCiAjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUlkZW50aWZpZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudEF1
dG9SZXNldFNjb3BlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2FjdGlvbi5oPgor
I2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRs
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgor
I2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQogI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCIKICNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBLZXllZERlY29kZXI7Ci1jbGFzcyBLZXllZEVuY29kZXI7
CitjbGFzcyBTUUxpdGVEYXRhYmFzZTsKK2NsYXNzIFNRTGl0ZVN0YXRlbWVudDsKIGVudW0gY2xh
c3MgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIDogYm9vbDsKIGVudW0gY2xhc3MgU3RvcmFn
ZUFjY2Vzc1dhc0dyYW50ZWQgOiBib29sOwogc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7
CkBAIC01MCwxOTAgKzU0LDE1MiBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAg
IE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgc3RhdGljIE9wZXJhdGluZ0Rh
dGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lKTsKLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSB0b2Rh
eSgpOwotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdDsKLSAgICBpbnQgeWVh
cigpIGNvbnN0IHsgcmV0dXJuIG1feWVhcjsgfQotICAgIGludCBtb250aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbW9udGg7IH0KLSAgICBpbnQgbW9udGhEYXkoKSBjb25zdCB7IHJldHVybiBtX21vbnRo
RGF5OyB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIp
IGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBj
b25zdDsKLSAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0OwotICAgIAotICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQotICAgICAgICA6IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9udGgobW9udGgp
Ci0gICAgICAgICwgbV9tb250aERheShtb250aERheSkKLSAgICB7IH0KLQotcHJpdmF0ZToKLSAg
ICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgot
ICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotY29uc3RleHByIHVu
c2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWdu
ZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3dTaG9ydCB7IDcgfTsKLWNvbnN0ZXhwciBTZWNvbmRzIG9w
ZXJhdGluZ1RpbWVXaW5kb3dGb3JMaXZlT25UZXN0aW5nIHsgMV9oIH07Ci0KLWVudW0gY2xhc3Mg
T3BlcmF0aW5nRGF0ZXNXaW5kb3cgOiB1aW50OF90IHsgTG9uZywgU2hvcnQsIEZvckxpdmVPblRl
c3RpbmcsIEZvclJlcHJvVGVzdGluZyB9OworY2xhc3MgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyOwogZW51bSBjbGFzcyBDb29raWVBY2Nlc3MgOiB1aW50OF90IHsgQ2Fubm90UmVxdWVz
dCwgQmFzZWRPbkNvb2tpZVBvbGljeSwgT25seUlmR3JhbnRlZCB9OwogCitzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkJ1Y2tldHNQZXJTdGF0aXN0aWMgPSA1Oworc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZTdGF0aXN0aWNzID0gNzsKK3N0YXRpYyBjb25zdGV4cHIgc3Rk
OjphcnJheTx1bnNpZ25lZCwgbnVtYmVyT2ZCdWNrZXRzUGVyU3RhdGlzdGljPiBidWNrZXRTaXpl
cyB7eyAxLCAzLCAxMCwgNTAsIDEwMCB9fTsKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0
aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07CitzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsK
KworLy8gUHJpdmF0ZSBDbGljayBNZWFzdXJlbWVudC4KK3VzaW5nIEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudCA9IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OwordXNp
bmcgVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQgPSBXZWJDb3JlOjpQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudDsKK3VzaW5nIFNvdXJjZVNpdGUgPSBXZWJDb3JlOjpQcml2YXRlQ2xp
Y2tNZWFzdXJlbWVudDo6U291cmNlU2l0ZTsKK3VzaW5nIEF0dHJpYnV0aW9uRGVzdGluYXRpb25T
aXRlID0gV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OkF0dHJpYnV0aW9uRGVzdGlu
YXRpb25TaXRlOwordXNpbmcgQXR0cmlidXRpb25UcmlnZ2VyRGF0YSA9IFdlYkNvcmU6OlByaXZh
dGVDbGlja01lYXN1cmVtZW50OjpBdHRyaWJ1dGlvblRyaWdnZXJEYXRhOwordXNpbmcgU291cmNl
RWFybGllc3RUaW1lVG9TZW5kID0gZG91YmxlOwordXNpbmcgRGVzdGluYXRpb25FYXJsaWVzdFRp
bWVUb1NlbmQgPSBkb3VibGU7Cit1c2luZyBTb3VyY2VEb21haW5JRCA9IHVuc2lnbmVkOwordXNp
bmcgRGVzdGluYXRpb25Eb21haW5JRCA9IHVuc2lnbmVkOworCit1c2luZyBFeGlzdGluZ0NvbHVt
bnMgPSBWZWN0b3I8U3RyaW5nPjsKK3VzaW5nIEV4cGVjdGVkQ29sdW1ucyA9IFZlY3RvcjxTdHJp
bmc+OwordXNpbmcgRXhpc3RpbmdDb2x1bW5OYW1lID0gU3RyaW5nOwordXNpbmcgRXhwZWN0ZWRD
b2x1bW5OYW1lID0gU3RyaW5nOwordXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNv
cmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwordXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbjsKK3VzaW5nIFN1YkZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47Cit1c2luZyBTdWJSZXNvdXJjZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluOwordXNpbmcgUmVkaXJlY3REb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47Cit1c2luZyBSZWRpcmVjdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIE5hdmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJs
ZURvbWFpbjsKK3VzaW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Cit1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbjsKK3VzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOworCit0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
Pj4gVGFibGVBbmRJbmRleFBhaXI7CisKIC8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8g
dXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mg
c3RhdGlzdGljcyBxdWV1ZS4KIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA6IHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB1c2luZyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICB1c2luZyBS
ZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
U3ViRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBT
dWJSZXNvdXJjZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IFJlZGlyZWN0RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
UmVkaXJlY3RlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1
c2luZyBSZWRpcmVjdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAg
ICB1c2luZyBOYXZpZ2F0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
Ci0gICAgdXNpbmcgTmF2aWdhdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKLSAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKLSAgICAKLSAgICB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUoKTsKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiwgU3VzcGVuZGFibGVXb3JrUXVldWUmLCBTaG91bGRJbmNsdWRlTG9jYWxo
b3N0LCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoLCBQQUw6OlNlc3Npb25JRCk7
CisgICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBpc0VtcHR5KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgVmVjdG9yPFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0
YSgpIGNvbnN0ID0gMDsKKyAgICBzdGF0aWMgSGFzaFNldDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUqPiYgYWxsU3RvcmVzKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29va2llQmxv
Y2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7Ci0gICAgdm9pZCB1cGRhdGVD
b29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgUmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0Nv
b2tpZXNGb3ImLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJC
bG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgaW50ZXJydXB0
KCk7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisgICAgdm9pZCBkaWRDcmVhdGVOZXR3b3Jr
UHJvY2VzcygpOworICAgIHZvaWQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7CisgICAg
dm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgaW5jbHVk
ZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKIAotICAgIHZvaWQgcHJvY2Vzc1N0
YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFN0cmlu
Zz4+IGNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1lcmdl
U3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgPSAwOworICAgIHZv
aWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYmKTsKKyAg
ICB2b2lkIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYpOworICAgIHZvaWQgcmVzb3VyY2VUb1N0cmluZyhTdHJpbmdCdWls
ZGVyJiwgY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0
b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2Vi
Q29yZTo6UGFnZUlkZW50aWZpZXIgb3BlbmVySUQsIE9wZW5lckRvbWFpbiYmKSA9IDA7Ci0gICAg
dm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+IGFnZ3JlZ2F0ZWRUaGlyZFBhcnR5RGF0YSgpIGNvbnN0OworICAgIAorICAgIHZvaWQgdXBk
YXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lk
IHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbnNU
b0Jsb2NrQ29va2llc0ZvciYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKKyAgICB2
b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAg
ICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpOworICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJl
ZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOworICAgIGJvb2wgaXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBncmFu
ZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jik7
CiAgICAgdm9pZCBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3QoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVj
dGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mLCBib29sIHZhbHVlKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzR3JhbmRmYXRo
ZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZv
ckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisgICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9pZCBzZXRJc1NjaGVkdWxl
ZEZvckFsbEJ1dENvb2tpZURhdGFSZW1vdmFsKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9v
bCB2YWx1ZSk7CisgICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYs
IFNlY29uZHMpOworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0
IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKKyAgICB2b2lkIHNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJik7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwor
ICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOworICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihj
b25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21h
aW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdDsKKyAgICB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0
RG9tYWluJik7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBU
b3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7CisgICAgdm9pZCBjbGVhclRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQoY29u
c3QgTmF2aWdhdGVkVG9Eb21haW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAg
IAorICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+
LCBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
Jik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BG
cmFtZURvbWFpbiYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nl
c3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgb3BlbmVySUQsIE9wZW5lckRvbWFpbiYmKTsKKyAgICB2b2lkIGdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBXZWJDb3JlOjpG
cmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyLCBXZWJDb3JlOjpTdG9yYWdl
QWNjZXNzUHJvbXB0V2FzU2hvd24sIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NTY29wZSwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZCk+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25z
dCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZvaWQg
bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBi
b29sIGlzTWFpbkZyYW1lLCBTZWNvbmRzIGRlbGF5QWZ0ZXJNYWluRnJhbWVEb2N1bWVudExvYWQs
IGJvb2wgd2FzUG90ZW50aWFsbHlJbml0aWF0ZWRCeVVzZXIpOworICAgIHZvaWQgbG9nQ3Jvc3NT
aXRlTG9hZFdpdGhMaW5rRGVjb3JhdGlvbihjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgY29u
c3QgTmF2aWdhdGVkVG9Eb21haW4mKTsKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25z
dCBUb3BGcmFtZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9p
ZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCBPcGVyYXRpbmdEYXRlc1dpbmRvdyk7CiAKKyAgICB2b2lk
IHNldElzUnVubmluZ1Rlc3QoYm9vbCk7CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3Qg
U3RyaW5nJik7Ci0KLSAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhp
bXVtRW50cnlDb3VudCk7Ci0gICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZShib29sKTsKICAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwor
ICAgIGJvb2wgc2hvdWxkU2tpcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAg
IHZvaWQgaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNzZWQsIGJvb2wgaGFzVXNl
ckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWws
IGJvb2wgaXNQcmV2YWxlbnQpOworICAgIGJvb2wgaXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKIAogICAg
IHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAg
ICB2b2lkIHNldElzUnVubmluZ1Rlc3QoYm9vbCk7Ci0gICAgYm9vbCBzaG91bGRTa2lwKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CiAgICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKLSAgICB2b2lkIHNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7CisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzKCk7CisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygp
OworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwor
ICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OworICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7CisgICAgYm9vbCBz
aG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkRXhlbXB0RnJv
bVdlYnNpdGVEYXRhRGVsZXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKICAg
ICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsK
LSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9k
ZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9p
ZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpOwotICAgIHZvaWQgc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZShXZWJDb3JlOjpU
aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlIG1vZGUpIHsgbV90aGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlID0gbW9kZTsgfTsKLSAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Ro
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7IH07Ci0gICAgdm9pZCBzZXRTYW1lU2l0ZVN0cmlj
dEVuZm9yY2VtZW50RW5hYmxlZChXZWJDb3JlOjpTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5h
YmxlZCBlbmFibGVkKSB7IG1fc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPSBlbmFi
bGVkOyB9OwotICAgIGJvb2wgaXNTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50RW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQgPT0gV2ViQ29y
ZTo6U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQ6OlllczsgfTsKLSAgICB2b2lkIHNl
dEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2RlKFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlIG1vZGUpIHsgbV9maXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZSA9IG1vZGU7IH0KLSAgICB2b2lkIHNldFN0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFpbihS
ZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbikgeyBtX3N0YW5kYWxvbmVBcHBsaWNhdGlvbkRvbWFp
biA9IFdURk1vdmUoZG9tYWluKTsgfQotI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKLSAg
ICB2b2lkIHNldEFwcEJvdW5kRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKTsK
LSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRV
bmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFzU3Rv
cmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
c3RkOjpvcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURv
bWFpbiYmLCBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBXZWJDb3JlOjpTdG9yYWdlQWNjZXNzU2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIFdlYkNvcmU6OkZyYW1l
SWRlbnRpZmllciwgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nl
c3NQcm9tcHRXYXNTaG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJikgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSwgU2Vjb25kcyBkZWxheUFmdGVyTWFp
bkZyYW1lRG9jdW1lbnRMb2FkLCBib29sIHdhc1BvdGVudGlhbGx5SW5pdGlhdGVkQnlVc2VyKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURv
bWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2dDcm9zc1NpdGVMb2FkV2l0aExpbmtEZWNvcmF0aW9uKGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlRGF0YUZvckRvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKLQotICAgIHZp
cnR1YWwgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBhbGxEb21haW5zKCkgY29uc3QgPSAwOwot
Ci0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgY29uc3QgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7
IH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGFsbERvbWFpbnMoKSBjb25zdDsKKyAgICBi
b29sIGRvbWFpbklERXhpc3RzSW5EYXRhYmFzZShpbnQpOworICAgIHZvaWQgcmVtb3ZlRGF0YUZv
ckRvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIGJvb2wgc2hvdWxkRW5mb3Jj
ZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCljb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVu
ZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNh
cCgpOworICAgIHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Cisg
ICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hl
TWF4QWdlQ2FwKCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMpOworICAgIHZvaWQgc2V0QXBwQm91bmREb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiYpOwogCi0gICAgdmlydHVhbCB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0RXhwaXJlZFN0YXRpc3RpY0ZvclRlc3RpbmcoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCB1bnNpZ25lZCBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlzU2NoZWR1bGVkRm9yQWxsQnV0Q29v
a2llRGF0YVJlbW92YWwsIGJvb2wpID0gMDsKLSAgICAKICAgICAvLyBQcml2YXRlIENsaWNrIE1l
YXN1cmVtZW50LgotICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYmLCBQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudEF0dHJpYnV0aW9uVHlwZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsVW5hdHRy
aWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5nKCkgPSAwOwot
ICAgIHZpcnR1YWwgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dDo6QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gYXR0cmlidXRlUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJj
ZVNpdGUmLCBjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRp
b25EZXN0aW5hdGlvblNpdGUmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0
cmlidXRpb25UcmlnZ2VyRGF0YSYmKSA9IDA7Ci0gICAgdmlydHVhbCBWZWN0b3I8V2ViQ29yZTo6
UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVu
dChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxlRG9tYWluPikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpID0gMDsKLSAgICB2aXJ0dWFs
IFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCYmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBv
cnRFbmRwb2ludCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQXR0cmlidXRlZFByaXZhdGVD
bGlja01lYXN1cmVtZW50c0FzRXhwaXJlZEZvclRlc3RpbmcoKSA9IDA7Ci0KLXByb3RlY3RlZDoK
LSAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpOwotCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFN1c3BlbmRhYmxlV29ya1F1ZXVlJiwg
U2hvdWxkSW5jbHVkZUxvY2FsaG9zdCk7Ci0gICAgCi0gICAgYm9vbCBkYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQ7IH0KLQot
ICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OwotICAgIGJvb2wgc2hvdWxkRW5mb3JjZVNhbWVTaXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKLSAgICB2aXJ0dWFsIFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgPSAw
OwotICAgIHZpcnR1YWwgUmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0
ZURhdGFGb3IgcmVnaXN0cmFibGVEb21haW5zVG9EZWxldGVPclJlc3RyaWN0V2Vic2l0ZURhdGFG
b3IoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgPSAw
OwotCi0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIHsgcmV0dXJu
IG1fc3RvcmU7IH0KLSAgICBSZWY8U3VzcGVuZGFibGVXb3JrUXVldWU+JiB3b3JrUXVldWUoKSB7
IHJldHVybiBtX3dvcmtRdWV1ZTsgfQotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotICAgIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVy
biBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9Ci0jZWxzZQotICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsgfQotI2VuZGlmCisgICAgdm9pZCBpbnNlcnRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudChXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYm
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7CisgICAgdm9pZCBtYXJr
QWxsVW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRBc0V4cGlyZWRGb3JUZXN0aW5n
KCk7CisgICAgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
QXR0cmlidXRpb25TZWNvbmRzVW50aWxTZW5kRGF0YT4gYXR0cmlidXRlUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQoY29uc3QgV2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ6OlNvdXJjZVNp
dGUmLCBjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25E
ZXN0aW5hdGlvblNpdGUmLCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmli
dXRpb25UcmlnZ2VyRGF0YSYmKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6UHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnQ+IGFsbEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgpOworICAgIHZv
aWQgY2xlYXJQcml2YXRlQ2xpY2tNZWFzdXJlbWVudChzdGQ6Om9wdGlvbmFsPFJlZ2lzdHJhYmxl
RG9tYWluPik7CisgICAgdm9pZCBjbGVhckV4cGlyZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCgp
OworICAgIFN0cmluZyBwcml2YXRlQ2xpY2tNZWFzdXJlbWVudFRvU3RyaW5nKCk7CisgICAgdm9p
ZCBjbGVhclNlbnRBdHRyaWJ1dGlvbihXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYm
LCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6QXR0cmlidXRpb25SZXBvcnRFbmRw
b2ludCk7CisgICAgdm9pZCBtYXJrQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50c0Fz
RXhwaXJlZEZvclRlc3RpbmcoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBjb2x1bW5zRm9yVGFibGUo
Y29uc3QgU3RyaW5nJik7CiAKICAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CiAgICAgICAgIHNpemVf
dCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKQEAgLTI0OSw2ICsyMTUsMTQgQEAgcHJvdGVj
dGVkOgogICAgICAgICBzaXplX3QgbWluaW11bVRvcEZyYW1lUmVkaXJlY3RzRm9yU2FtZVNpdGVT
dHJpY3RFbmZvcmNlbWVudCB7IDEwIH07CiAgICAgICAgIGJvb2wgaXNSdW5uaW5nVGVzdCB7IGZh
bHNlIH07CiAgICAgfTsKKyAgICAKKyAgICBXZWJDb3JlOjpUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmdNb2RlIHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3Ro
aXJkUGFydHlDb29raWVCbG9ja2luZ01vZGU7IH07CisgICAgdm9pZCBzZXRUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmdNb2RlKFdlYkNvcmU6OlRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgbW9k
ZSkgeyBtX3RoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUgPSBtb2RlOyB9OworICAgIHZvaWQg
c2V0U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQoV2ViQ29yZTo6U2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudEVuYWJsZWQgZW5hYmxlZCkgeyBtX3NhbWVTaXRlU3RyaWN0RW5mb3JjZW1l
bnRFbmFibGVkID0gZW5hYmxlZDsgfTsKKyAgICBib29sIGlzU2FtZVNpdGVTdHJpY3RFbmZvcmNl
bWVudEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3NhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRF
bmFibGVkID09IFdlYkNvcmU6OlNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnRFbmFibGVkOjpZZXM7
IH07CisgICAgdm9pZCBzZXRGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZShXZWJDb3Jl
OjpGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBtb2RlKSB7IG1fZmlyc3RQYXJ0eVdl
YnNpdGVEYXRhUmVtb3ZhbE1vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBzZXRTdGFuZGFsb25lQXBw
bGljYXRpb25Eb21haW4oUmVnaXN0cmFibGVEb21haW4mJiBkb21haW4pIHsgbV9zdGFuZGFsb25l
QXBwbGljYXRpb25Eb21haW4gPSBXVEZNb3ZlKGRvbWFpbik7IH0KKyAgICBib29sIGRhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3Zl
ZDsgfQogICAgIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBt
X3BhcmFtZXRlcnM7IH0KICAgICBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cCgpIHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQogICAgIGNvbnN0
IFdhbGxUaW1lJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4g
bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOyB9CkBAIC0yNjEsMjEgKzIzNSwxMzggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgZGVidWdMb2dnaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVidWdMb2dnaW5nRW5hYmxlZDsgfTsKICAgICBib29sIGRlYnVnTW9kZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH0KICAgICBXZWJDb3JlOjpGaXJzdFBh
cnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSBmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGU7IH0K
LSAgICBib29sIHNob3VsZEV4ZW1wdEZyb21XZWJzaXRlRGF0YURlbGV0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1h
eE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLSAgICAK
LSAgICBWZWN0b3I8Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPj4gbV9kYXRhUmVjb3JkUmVtb3Zh
bENvbXBsZXRpb25IYW5kbGVyczsKKyAgICBib29sIGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VGaWxlOyB9CisgICAgdm9pZCBzZXRJc05ld1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZUZpbGUoYm9vbCBpc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZp
bGUpIHsgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUgPSBpc05ld1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KIAogcHJpdmF0ZToKLSAgICBib29s
IHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWJ1Z0xvZ2dn
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAgIHZv
aWQgY2xvc2UoKTsKKyAgICB2b2lkIG9wZW5JVFBEYXRhYmFzZSgpOworICAgIHZvaWQgb3BlbkFu
ZFVwZGF0ZVNjaGVtYUlmTmVjZXNzYXJ5KCk7CisgICAgYm9vbCBjcmVhdGVVbmlxdWVJbmRpY2Vz
KCk7CisgICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKKyAgICB2b2lkIGFkZE1pc3NpbmdUYWJsZXNJ
Zk5lY2Vzc2FyeSgpOworICAgIGJvb2wgbWlzc2luZ1VuaXF1ZUluZGljZXMoKTsKKyAgICBib29s
IG5lZWRzVXBkYXRlZFNjaGVtYSgpOworICAgIGJvb2wgbmVlZHNVcGRhdGVkUHJpdmF0ZUNsaWNr
TWVhc3VyZW1lbnRTY2hlbWEoKTsKKyAgICB2b2lkIHJlbmFtZUNvbHVtbkluVGFibGUoU3RyaW5n
JiYsIEV4aXN0aW5nQ29sdW1uTmFtZSYmLCBFeHBlY3RlZENvbHVtbk5hbWUmJik7CisgICAgdm9p
ZCBhZGRNaXNzaW5nQ29sdW1uc1RvVGFibGUoU3RyaW5nJiYsIGNvbnN0IEV4aXN0aW5nQ29sdW1u
cyYsIGNvbnN0IEV4cGVjdGVkQ29sdW1ucyYpOworICAgIHZvaWQgYWRkTWlzc2luZ0NvbHVtbnNJ
Zk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcmVuYW1lQ29sdW1uc0lmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCByZW5hbWVDb2x1bW5JblRhYmxlKCk7CisgICAgVGFibGVBbmRJbmRleFBhaXIgY3VycmVu
dFRhYmxlQW5kSW5kZXhRdWVyaWVzKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgdXBkYXRlUHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnRTY2hlbWFJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgZW5hYmxl
Rm9yZWlnbktleXMoKTsKKyAgICBib29sIG1pc3NpbmdSZWZlcmVuY2VUb09ic2VydmVkRG9tYWlu
cygpOworICAgIHZvaWQgbWlncmF0ZURhdGFUb05ld1RhYmxlc0lmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBjbGVhckRhdGFiYXNlQ29udGVudHMoKTsKKworICAgIHZvaWQgZGVzdHJveVN0YXRlbWVu
dHMoKTsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnRBdXRvUmVzZXRTY29wZSBzY29wZWRT
dGF0ZW1lbnQoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4mLCBBU0NJ
SUxpdGVyYWwsIGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgU3ViRnJhbWVEb21haW4mKSBjb25zdDsK
KyAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRv
cEZyYW1lRG9tYWluJiYsIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwg
V2ViQ29yZTo6UGFnZUlkZW50aWZpZXIsIFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNT
aG93biwgV2ViQ29yZTo6U3RvcmFnZUFjY2Vzc1Njb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFdlYkNvcmU6OlN0b3JhZ2VBY2Nlc3NXYXNHcmFudGVkKT4mJik7CisgICAgV2ViQ29yZTo6U3Rv
cmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQodW5zaWduZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Cisg
ICAgYm9vbCBhcmVBbGxUaGlyZFBhcnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFt
ZURvbWFpbiYpOworICAgIENvb2tpZUFjY2VzcyBjb29raWVBY2Nlc3MoY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOworCisgICAgVmVjdG9yPFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFy
dHk+IGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucyh1bnNpZ25l
ZCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICBTZWNvbmRzIGdldE1vc3RS
ZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYpIGNvbnN0OworCisgICAgdm9pZCBtZXJnZVN0YXRpc3RpYyhjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBtZXJnZShXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQqLCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBpbnNl
cnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgV0FSTl9VTlVT
RURfUkVUVVJOOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBM
aXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiwgdW5z
aWduZWQpOworICAgIFN0cmluZyBlbnN1cmVBbmRNYWtlRG9tYWluTGlzdChjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYpOworICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNjb3BlJiwgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gZmlyc3REb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikg
Y29uc3Q7CisKKyAgICBTdHJpbmcgZ2V0RG9tYWluU3RyaW5nRnJvbURvbWFpbklEKHVuc2lnbmVk
KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBkb21haW5JRChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgZG9tYWluRXhpc3RzKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZvaWQgdXBkYXRlRGF0YVJlY29yZHNS
ZW1vdmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgaW50KTsKKworICAgIHN0cnVjdCBEb21h
aW5EYXRhIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7CisgICAgICAgIFJlZ2lzdHJhYmxl
RG9tYWluIHJlZ2lzdHJhYmxlRG9tYWluOworICAgICAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb247CisgICAg
ICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKKyAgICAgICAgYm9vbCBpc1NjaGVkdWxlZEZvckFsbEJ1
dENvb2tpZURhdGFSZW1vdmFsOworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9yY2VtZW50OworICAgIH07CisKKyAgICBWZWN0
b3I8RG9tYWluRGF0YT4gZG9tYWlucygpIGNvbnN0OworICAgIHZvaWQgc2V0VXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdh
bGxUaW1lKTsKKyAgICBib29sIGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihj
b25zdCBEb21haW5EYXRhJiwgT3BlcmF0aW5nRGF0ZXNXaW5kb3cpOworICAgIHN0ZDo6b3B0aW9u
YWw8V2FsbFRpbWU+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKGNvbnN0IERvbWFpbkRh
dGEmKTsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lLCBPcGVyYXRpbmdEYXRlc1dpbmRvdykgY29uc3Q7CisKKyAgICB2
b2lkIGNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmKTsKKyAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiYpOwogICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKLSAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwotICAgIHZv
aWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNp
ZGVDb29raWVzKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VD
YXAoKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2tBbmRE
ZWxldGVDb29raWVzRm9yKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBk
b21haW5zVG9CbG9ja0J1dEtlZXBDb29raWVzRm9yKCkgY29uc3Q7CisgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eSgpIGNv
bnN0OworICAgIEhhc2hNYXA8VG9wRnJhbWVEb21haW4sIFN1YlJlc291cmNlRG9tYWluPiBkb21h
aW5zV2l0aFN0b3JhZ2VBY2Nlc3MoKSBjb25zdDsKKworICAgIHZvaWQgcmVjbGFzc2lmeVJlc291
cmNlcygpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICBib29sIHBy
ZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudEF1dG9SZXNldFNj
b3BlJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKworICAgIGVudW0gY2xhc3Mg
QWRkZWRSZWNvcmQgeyBObywgWWVzIH07CisgICAgc3RkOjpwYWlyPEFkZGVkUmVjb3JkLCBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPj4gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgCisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgc3RydWN0IE5vdFZlcnlQcmV2YWxl
bnRSZXNvdXJjZXMgeworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RyYWJsZURvbWFp
bjsKKyAgICAgICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7CisgICAgICAgIHVu
c2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWdu
ZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCB0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgfTsKKworICAgIEhhc2hNYXA8dW5z
aWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCk7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworI2VuZGlmCisKKyAgICB1bnNpZ25l
ZCByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNE
b21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMp
OworICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Cisg
ICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAg
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVi
dWdNb2RlKCk7CisKKyAgICBib29sIHNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKGNvbnN0
IERvbWFpbkRhdGEmLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpOworICAgIGJv
b2wgc2hvdWxkUmVtb3ZlQWxsQnV0Q29va2llc0Zvcihjb25zdCBEb21haW5EYXRhJiwgYm9vbCBz
aG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKTsKKyAgICBib29sIHNob3VsZEVuZm9yY2VTYW1l
U2l0ZVN0cmljdEZvcihEb21haW5EYXRhJiwgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nKTsKKyAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0
YUZvciByZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvcigp
OworCisgICAgQVNDSUlMaXRlcmFsIGdldFN1YlN0YXRpc3RpY1N0YXRlbWVudChjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZFN1YlN0YXRpc3RpY0xpc3QoU3RyaW5nQnVpbGRl
ciYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbikgY29uc3Q7
CisKKyAgICB2b2lkIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKSAgeyB9CisgICAgdm9pZCB1cGRhdGVP
cGVyYXRpbmdEYXRlc1BhcmFtZXRlcnMoKTsKKworICAgIFNjb3BlRXhpdDxGdW5jdGlvbjx2b2lk
KCk+PiBXQVJOX1VOVVNFRF9SRVRVUk4gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7CisK
KyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9z
dG9yZTsgfQorI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllcjsgfQorI2VuZGlmCisgICAgUmVmPFN1c3BlbmRhYmxlV29ya1F1ZXVlPiYg
d29ya1F1ZXVlKCkgeyByZXR1cm4gbV93b3JrUXVldWU7IH0KKworICAgIC8vIFByaXZhdGUgQ2xp
Y2sgTWVhc3VyZW1lbnQuCisgICAgdm9pZCByZW1vdmVVbmF0dHJpYnV0ZWQoV2ViQ29yZTo6UHJp
dmF0ZUNsaWNrTWVhc3VyZW1lbnQmKTsKKyAgICBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJl
bWVudCBidWlsZFByaXZhdGVDbGlja01lYXN1cmVtZW50RnJvbURhdGFiYXNlKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCosIFByaXZhdGVDbGlja01lYXN1cmVtZW50QXR0cmlidXRpb25UeXBlKTsK
KyAgICBTdHJpbmcgYXR0cmlidXRpb25Ub1N0cmluZyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQq
LCBQcml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uVHlwZSk7CisgICAgc3RkOjpwYWly
PHN0ZDo6b3B0aW9uYWw8VW5hdHRyaWJ1dGVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnQ+LCBzdGQ6
Om9wdGlvbmFsPEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudD4+IGZpbmRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudDo6
U291cmNlU2l0ZSYsIGNvbnN0IFdlYkNvcmU6OlByaXZhdGVDbGlja01lYXN1cmVtZW50OjpBdHRy
aWJ1dGlvbkRlc3RpbmF0aW9uU2l0ZSYpOworICAgIHZvaWQgbWFya1JlcG9ydEFzU2VudFRvRGVz
dGluYXRpb24oU291cmNlRG9tYWluSUQsIERlc3RpbmF0aW9uRG9tYWluSUQpOworICAgIHZvaWQg
bWFya1JlcG9ydEFzU2VudFRvU291cmNlKFNvdXJjZURvbWFpbklELCBEZXN0aW5hdGlvbkRvbWFp
bklEKTsKKyAgICBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDxTb3VyY2VFYXJsaWVzdFRpbWVUb1Nl
bmQ+LCBzdGQ6Om9wdGlvbmFsPERlc3RpbmF0aW9uRWFybGllc3RUaW1lVG9TZW5kPj4gZWFybGll
c3RUaW1lc1RvU2VuZChjb25zdCBXZWJDb3JlOjpQcml2YXRlQ2xpY2tNZWFzdXJlbWVudCYpOwog
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwogICAgIFJlZjxT
dXNwZW5kYWJsZVdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CkBAIC0zMDMsNiArMzk0LDc0IEBAIHBy
aXZhdGU6CiAgICAgV2ViQ29yZTo6Rmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUgbV9m
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZSB7IFdlYkNvcmU6OkZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzIH07CiAgICAgUmVnaXN0cmFibGVEb21h
aW4gbV9zdGFuZGFsb25lQXBwbGljYXRpb25Eb21haW47CiAgICAgSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4gbV9hcHBCb3VuZERvbWFpbnM7CisgICAgVmVjdG9yPENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4+IG1fZGF0YVJlY29yZFJlbW92YWxDb21wbGV0aW9uSGFuZGxlcnM7CisKKyAgICBQ
QUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGly
ZWN0b3J5UGF0aDsKKyAgICBib29sIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VGaWxlIHsgZmFsc2UgfTsKKworICAgIHVuc2lnbmVkIG1fb3BlcmF0aW5nRGF0ZXNTaXplIHsg
MCB9OworICAgIHN0ZDo6b3B0aW9uYWw8T3BlcmF0aW5nRGF0ZT4gbV9sb25nV2luZG93T3BlcmF0
aW5nRGF0ZTsKKyAgICBzdGQ6Om9wdGlvbmFsPE9wZXJhdGluZ0RhdGU+IG1fc2hvcnRXaW5kb3dP
cGVyYXRpbmdEYXRlOworICAgIE9wZXJhdGluZ0RhdGUgbV9tb3N0UmVjZW50T3BlcmF0aW5nRGF0
ZTsKKworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKKyAg
ICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVRyYW5zYWN0aW9uIG1fdHJhbnNhY3Rpb247CisKKyAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fb2Jz
ZXJ2ZWREb21haW5Db3VudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0VG9wTGV2ZWxE
b21haW5TdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVMaW5r
RGVjb3JhdGlvbnNGcm9tRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV90b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlT
Y3JpcHRzRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNT
dGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1N0YXRlbWVudDsK
KyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1N0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVk
U3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlSXNTY2hlZHVsZWRGb3JB
bGxCdXRDb29raWVEYXRhUmVtb3ZhbFN0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY291bnRQ
cmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV9jb3VudFByZXZhbGVudFJlc291cmNlc1dpdGhvdXRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PiBtX2dldFJlc291cmNlRGF0YUJ5RG9tYWluTmFtZVN0YXRlbWVudDsKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZ2V0QWxsRG9tYWlu
c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fZG9tYWluU3RyaW5nRnJvbURvbWFpbklEU3RhdGVtZW50OworICAgIG11dGFi
bGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRBbGxTdWJT
dGF0aXN0aWNzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4gbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50OworICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9nZXRNb3N0
UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9saW5rRGVjb3JhdGlvbkV4aXN0c1N0
YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fc2NyaXB0TG9hZEV4aXN0c1N0YXRlbWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViRnJhbWVFeGlzdHNTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX3N1YlJlc291cmNlRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91bmlxdWVSZWRpcmVjdEV4aXN0c1N0YXRl
bWVudDsKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fb2JzZXJ2ZWREb21haW5zRXhpc3RzU3RhdGVtZW50OworICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9yZW1vdmVBbGxEYXRhU3RhdGVt
ZW50OworICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4gbV9lYXJsaWVzdFRpbWVzVG9TZW5kU3RhdGVtZW50OworICAgIAorICAgIC8vIFByaXZhdGUg
Q2xpY2sgTWVhc3VyZW1lbnQuCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4gbV9pbnNlcnRVbmF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRl
bWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lu
c2VydEF0dHJpYnV0ZWRQcml2YXRlQ2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3NldFVuYXR0cmlidXRlZFBy
aXZhdGVDbGlja01lYXN1cmVtZW50QXNFeHBpcmVkU3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJVbmF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFyQXR0cmlidXRlZFByaXZhdGVDbGlja01lYXN1cmVtZW50
U3RhdGVtZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fY2xlYXJFeHBpcmVkUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRTdGF0ZW1lbnQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9hbGxVbmF0dHJpYnV0ZWRQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudEF0dHJpYnV0aW9uc1N0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2FsbEF0dHJpYnV0ZWRQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudFN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PiBtX2ZpbmRVbmF0dHJpYnV0ZWRTdGF0ZW1lbnQ7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9maW5kQXR0cmlidXRlZFN0YXRl
bWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUF0dHJpYnV0aW9uc0VhcmxpZXN0VGltZVRvU2VuZFN0YXRlbWVudDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3JlbW92ZVVuYXR0cmlidXRlZFN0
YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X21hcmtSZXBvcnRBc1NlbnRUb1NvdXJjZVN0YXRlbWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21hcmtSZXBvcnRBc1NlbnRUb0Rlc3RpbmF0aW9u
U3RhdGVtZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IDRkYjgwN2E3ZDlkNzA1NDAx
ZWQ1OWE2Y2VlZTJhZDdiMjQwNjc3NDAuLjY1OWIzOTBhNGE4ZDM2OWUzNTkzMTAwNWNjYzYxNzE5
YmI0OWZmNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCkBAIC0zNCw4ICszNCw3IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eU1l
c3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKICNpbmNsdWRlICJQcml2YXRl
Q2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2lu
Y2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VB
Y2Nlc3NTdGF0dXMuaCIKICNpbmNsdWRlICJXZWJGcmFtZVByb3h5LmgiCkBAIC0xNjQsMTAgKzE2
Myw3IEBAIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKE5ldHdvcmtTZXNzaW9uJiBuCiAKICAgICBpZiAoIXJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHBvc3RUYXNrKFt0aGlzLCBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeS5pc29sYXRlZENvcHkoKSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgc2Vzc2lvbklE
ID0gbmV0d29ya1Nlc3Npb24uc2Vzc2lvbklEKCldIHsKLSAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlID0gbWFrZVVuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
KnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCBzaG91bGRJbmNsdWRlTG9jYWxob3N0LCByZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBzZXNzaW9uSUQpOwotCi0gICAgICAgICAgICBhdXRv
IG1lbW9yeVN0b3JlID0gbWFrZVVuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCk7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlLmdldCgpKS5wb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSgqbWVtb3J5
U3RvcmUpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBtYWtlVW5pcXVlPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCBzaG91bGRJ
bmNsdWRlTG9jYWxob3N0LCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBzZXNzaW9u
SUQpOwogCiAgICAgICAgICAgICBhdXRvIGxlZ2FjeVBsaXN0RmlsZVBhdGggPSBGaWxlU3lzdGVt
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSwgImZ1bGxfYnJvd3Npbmdfc2Vzc2lvbl9yZXNvdXJjZUxvZy5wbGlzdCIpOwogICAgICAgICAg
ICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobGVnYWN5UGxpc3RGaWxlUGF0aCkpCkBAIC0y
NDAsMTMgKzIzNiwxMiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cG9w
dWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKENvbXBsZXRpb25IYW5kbAogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlICYmIGlz
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBkYXRhYmFzZVN0b3JlID0gZG93bmNhc3Q8UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7Ci0gICAgICAg
ICAgICBpZiAoZGF0YWJhc2VTdG9yZS5pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZUZpbGUoKSkgeworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUgJiYgaXM8UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUtPmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
RmlsZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YShbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGRhdGFi
YXNlU3RvcmUuc2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0SXNOZXdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBXVEZNb3Zl
KHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBsb2dUZXN0aW5nRXZlbnQo
IlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJfcyk7CkBAIC0zMTAsMTIgKzMwNSwxMiBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0RhdGFiYXNl
SGFzQWxsVGFibGVzKENvbXBsZXRpb25IYQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7IAotICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3Rh
dGlzdGljc1N0b3JlKSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlIHx8ICFpczxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8g
bWlzc2luZ1RhYmxlcyA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmNoZWNrRm9yTWlzc2luZ1RhYmxlc0luU2NoZW1hKCk7
CisgICAgICAgIGF1dG8gbWlzc2luZ1RhYmxlcyA9IG1fc3RhdGlzdGljc1N0b3JlLT5jaGVja0Zv
ck1pc3NpbmdUYWJsZXNJblNjaGVtYSgpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYXNBbGxU
YWJsZXMgPSBtaXNzaW5nVGFibGVzID8gZmFsc2UgOiB0cnVlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGhhc0FsbFRhYmxlcyk7CiAgICAgICAgIH0pOwpAQCAtMzI3LDEyICsz
MjIsMTIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NE
YXRhYmFzZUNvbHVtbnNGb3JUYWJsZShjb25zdCBTdHIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHRhYmxlID0gdGFibGUuaXNvbGF0ZWRDb3B5
KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CisgICAgICAg
IGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
eyB9KTsKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIGF1dG8gY29sdW1ucyA9IGRvd25jYXN0PFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLmNvbHVtbnNG
b3JUYWJsZSh0YWJsZSk7CisgICAgICAgIGF1dG8gY29sdW1ucyA9IG1fc3RhdGlzdGljc1N0b3Jl
LT5jb2x1bW5zRm9yVGFibGUodGFibGUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtjb2x1bW5z
ID0gV1RGTW92ZShjb2x1bW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGNvbHVtbnMpKTsKICAgICAgICAgfSk7CkBAIC03MzUsOCArNzMwLDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKICAgICBw
b3N0VGFzayhbdGhpc10gewogICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAg
ICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICAgICAgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQotICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
LnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCgpOworICAgICAgICAgICAgaWYgKGlzPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkKKyAgICAgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7CiAg
ICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTg4OSwxMiArODg0LDEyIEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlbGF0aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZShj
b25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNr
KFt0aGlzLCBzdWJEb21haW4gPSBzdWJEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcERvbWFpbiA9
IHRvcERvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZSkpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNSZWxhdGlvbnNoaXBPbmx5SW5EYXRhYmFz
ZU9uY2UgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1f
c3RhdGlzdGljc1N0b3JlKS5pc0NvcnJlY3RTdWJTdGF0aXN0aWNzQ291bnQoc3ViRG9tYWluLCB0
b3BEb21haW4pOworICAgICAgICBib29sIGlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNl
ID0gbV9zdGF0aXN0aWNzU3RvcmUtPmlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChzdWJEb21h
aW4sIHRvcERvbWFpbik7CiAgICAgICAgIAogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlbGF0
aW9uc2hpcE9ubHlJbkRhdGFiYXNlT25jZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGlzUmVsYXRpb25zaGlwT25seUluRGF0YWJhc2VPbmNlKTsKQEAgLTExNTEsOCArMTE0Niw4
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyCiAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRm
YXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpIHsKICAgICAgICAgICAg
ICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0
aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNh
c3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9y
ZSkuc2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPigqbV9z
dGF0aXN0aWNzU3RvcmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3Rv
cmUtPnNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSh0cnVlKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0
YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7
CiAgICAgICAgICAgICB9CkBAIC0xMTg1LDEyICsxMTgwLDExIEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkb21haW5JREV4aXN0c0luRGF0YWJhc2UoaW50IGRvbWFpbklE
LCBDb21wCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0
aGlzLCBkb21haW5JRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkp
IHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgYXV0byYgZGF0YWJhc2VTdG9yZSA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpOwotICAgICAgICBib29sIGRvbWFpbklE
RXhpc3RzID0gZGF0YWJhc2VTdG9yZS5kb21haW5JREV4aXN0c0luRGF0YWJhc2UoZG9tYWluSUQp
OworICAgICAgICBib29sIGRvbWFpbklERXhpc3RzID0gbV9zdGF0aXN0aWNzU3RvcmUtPmRvbWFp
bklERXhpc3RzSW5EYXRhYmFzZShkb21haW5JRCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Rv
bWFpbklERXhpc3RzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZG9tYWluSURF
eGlzdHMpOwogICAgICAgICB9KTsKQEAgLTE0NDgsNyArMTQ0Miw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdXNwZW5kKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHNoYXJlZFN0
YXRpc3RpY3NRdWV1ZSgpLT5zdXNwZW5kKFtdKCkgbXV0YWJsZSB7Ci0gICAgICAgIGZvciAoYXV0
byYgZGF0YWJhc2VTdG9yZSA6IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjph
bGxTdG9yZXMoKSkKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZVN0b3JlIDogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjphbGxTdG9yZXMoKSkKICAgICAgICAgICAgIGRhdGFiYXNlU3Rv
cmUtPmludGVycnVwdCgpOwogICAgIH0sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9PcGVyYXRpbmdEYXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTY1YTJiODFmZjdmYTA4MTVkMDBkZjUyZjYyNTc1YTI2MmMzNjgzZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvT3BlcmF0aW5nRGF0ZS5oCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9X
YWxsVGltZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7
CitwdWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0
aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVy
YXRpbmdEYXRlIHRvZGF5KCk7CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0
OworICAgIGludCB5ZWFyKCkgY29uc3QgeyByZXR1cm4gbV95ZWFyOyB9CisgICAgaW50IG1vbnRo
KCkgY29uc3QgeyByZXR1cm4gbV9tb250aDsgfQorICAgIGludCBtb250aERheSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9udGhEYXk7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRp
bmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdE
YXRlJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgT3BlcmF0aW5nRGF0ZShpbnQgeWVhciwgaW50
IG1vbnRoLCBpbnQgbW9udGhEYXkpCisgICAgICAgIDogbV95ZWFyKHllYXIpCisgICAgICAgICwg
bV9tb250aChtb250aCkKKyAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQorICAgIHsgfQor
Citwcml2YXRlOgorICAgIGludCBtX3llYXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07
IC8vIFswLCAxMV0uCisgICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9Owor
Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nIHsgMzAgfTsKK2Nv
bnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0IHsgNyB9OworY29uc3Rl
eHByIFNlY29uZHMgb3BlcmF0aW5nVGltZVdpbmRvd0ZvckxpdmVPblRlc3RpbmcgeyAxX2ggfTsK
KworZW51bSBjbGFzcyBPcGVyYXRpbmdEYXRlc1dpbmRvdyA6IHVpbnQ4X3QgeyBMb25nLCBTaG9y
dCwgRm9yTGl2ZU9uVGVzdGluZywgRm9yUmVwcm9UZXN0aW5nIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKaW5kZXggNjZhZWRhNDNjODJkOGJmYjMzNWJiZmVmNjA5NWQwNGVm
YWRiODYyMC4uMzkxYWQ5NmVjNzUwYWExNjY3ODlkYzI5YTQ2MzJmNTQ3OGQ3Yzg2ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CkBAIC04Myw4ICs4Myw2IEBAIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRTdHJl
YW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByZWNv
bm5lY3RUYXNrLmNwcAogCi1OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAotTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ29v
a2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZmUzZDMyYjMyOTVjMmM0NGZkNDQ0NGNkZDdmMTQx
ZjI0MDA0Y2EwMi4uZGJiNWE4M2Q1MWJlMWYzODI0N2E0NDA2ZTI2OGFkZDNlYjM5MzVhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
MDAwLDYgKzEwMDAsOCBAQAogCQk0OUJDQTE5MjIzQTE3NzY2MDAyOEE4MzYgLyogQVBJUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QkNBMTkxMjNBMTc3NjYwMDI4QTgzNiAvKiBBUElSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eS5oICovOyB9OwogCQk0OUJDQTE5NTIzQTE4Q0ZEMDAy
OEE4MzYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCQ0ExOTAyM0Ex
NzU0OTAwMjhBODM2IC8qIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SW50ZXJu
YWwuaCAqLzsgfTsKIAkJNDlCQ0ExOTcyM0ExOTMwRDAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUaGlyZFBhcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUJDQTE5NjIzQTE4RjYyMDAyOEE4MzYgLyogQVBJUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkuaCAqLzsgfTsKKwkJNDlDRUI0RkUyNkQ2QzE3NzAwMUE0QzYz
IC8qIE9wZXJhdGluZ0RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlDRUI0RkQyNkQ2QzE3NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3Bw
ICovOyB9OworCQk0OUNFQjUwMTI2RDZDMjJFMDAxQTRDNjMgLyogT3BlcmF0aW5nRGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDRUI1MDAyNkQ2
QzIxMDAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuaCAqLzsgfTsKIAkJNDlFQ0E0MUMyM0ZDQTVE
ODAwMjMzNThEIC8qIFBvbGljeURlY2lzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVDQTQxQjIzRkNBNDg2MDAyMzM1OEQgLyogUG9saWN5RGVj
aXNpb24uaCAqLzsgfTsKIAkJNDlGQkVGRkQyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlGQkVGRkMyMzlCMDExRDAwQkQwMzJGIC8qIF9XS1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5Lm1tICovOyB9OwogCQk0OUZCRUZGRjIzOUIwMTJGMDBC
RDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZCRUZGRTIzOUIwMTJGMDBC
RDAzMkYgLyogX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkubW0gKi87IH07CkBA
IC0xMzQ2LDcgKzEzNDgsNiBAQAogCQk3QUI2RUE0NzFFRUFCNkI4MDAwMzdCMkIgLyogQVBJR2Vv
bG9jYXRpb25Qcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FCNkVBNDYxRUVBQjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlk
ZXIuaCAqLzsgfTsKIAkJN0FGMjM2MjExRTc5QTQwODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGMjM2MUYxRTc5
QTNEODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oICovOyB9OwogCQk3QUZCRDM2MzIxRTUwRjM5MDA1
REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0Ig
LyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi87IH07Ci0JCTdBRkJEMzY3MjFF
NTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzY1MjFFNTFC
QUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLzsgfTsK
IAkJN0FGQkQzNkYyMUU1NDZGODAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkJEMzZEMjFFNTQ2RTMw
MDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi87IH07CiAJCTdCMURCMjY2MjU2NjhDRTEw
MDBFMjZCQyAvKiBBcnJheVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0IxREIyNjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJl
bmNlLmggKi87IH07CiAJCTdCNDgzRjFGMjVDRERBOUMwMDEyMDQ4NiAvKiBNZXNzYWdlUmVjZWl2
ZVF1ZXVlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QjQ4M0YxQjI1Q0REQTlCMDAxMjA0ODYgLyogTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oICov
OyB9OwpAQCAtMzk3NCw2ICszOTc1LDggQEAKIAkJNDlCQ0ExOTAyM0ExNzU0OTAwMjhBODM2IC8q
IF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5SW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHlJbnRlcm5hbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUJDQTE5MTIzQTE3NzY2MDAyOEE4MzYgLyogQVBJ
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDlCQ0ExOTYyM0ExOEY2MjAwMjhBODM2IC8qIEFQSVJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaGlyZFBhcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSVJlc291cmNlTG9hZFN0YXRpc3RpY3NU
aGlyZFBhcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5Q0VCNEZEMjZENkMx
NzcwMDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE9wZXJh
dGluZ0RhdGUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9PcGVyYXRpbmdEYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDRUI1MDAyNkQ2QzIxMDAwMUE0QzYzIC8qIE9wZXJh
dGluZ0RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BlcmF0aW5nRGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OURBQTM4QjI0Q0JBMUE4MDA3OTNENzUgLyogRGVmYXVsdFdlYkJy
b3dzZXJDaGVja3MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEZWZhdWx0V2ViQnJvd3NlckNo
ZWNrcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlEQUEzOEQyNENCQTFCRDAw
NzkzRDc1IC8qIERlZmF1bHRXZWJCcm93c2VyQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmF1
bHRXZWJCcm93c2VyQ2hlY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUNB
NDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
b2xpY3lEZWNpc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDYyNSw4ICs0
NjI4LDggQEAKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURh
dGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMw
MTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1By
ZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QTBE
Nzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0EwRDc4
NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBwYXRoID0g
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFwcGxlLldl
YktpdC5wbHVnaW4tY29tbW9uLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9ICJjb20uYXBwbGUu
V2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdDIv
Y29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJN0ExRTJBODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQSU5vdGlmaWNh
dGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5vdGlm
aWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBM0FDRTFB
MUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9h
ZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NjQ4LDE0ICs0NjUx
LDEwIEBACiAJCTdBQjRFQTQyMjI3NzgwREQwMDg1QkJBQSAvKiBTYW5kYm94VXRpbGl0aWVzLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2FuZGJveFV0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUljb25EYXRh
YmFzZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJY29uRGF0
YWJhc2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVB
QjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FDRTgyRTgy
MjFDQUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUg
LyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFGMUU3OUEz
RDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3
OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0FGQkQz
NjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGQkQzNkQyMUU1
NDZFMzAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGVyc2lz
dGVuY3lVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2RTIxRTU0
NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
ZXJzaXN0ZW5jeVV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0IxREIy
NjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFycmF5UmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05Mzc1LDEyICs5Mzc0LDEwIEBACiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAv
KiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwICovLAotCQkJCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovLAotCQkJCTdBRkJEMzY0MjFFNTFC
QUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovLAot
CQkJCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUuaCAqLywKLQkJCQk3QUNFODJFODIyMUNBRTA3MDAwREE5NEMgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKLQkJCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCisJCQkJNDlDRUI0RkQyNkQ2QzE3
NzAwMUE0QzYzIC8qIE9wZXJhdGluZ0RhdGUuY3BwICovLAorCQkJCTQ5Q0VCNTAwMjZENkMyMTAw
MDFBNEM2MyAvKiBPcGVyYXRpbmdEYXRlLmggKi8sCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJD
RjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCisJCQkJN0EwRDc4NjEy
MjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJ
CTdBNDFFOUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mu
aCAqLywKIAkJCQk3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1
cy5oICovLAogCQkJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwICovLApAQCAtMTIyNDgsNiArMTIyNDUsNyBAQAogCQkJCTM3NTRE
NTQ1MUIzQTI5RkQwMDNBNEM3RiAvKiBOU0ludm9jYXRpb25TUEkuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxREQ3MkFCMjY4MjE2NzMwMEE5MEM3MSAvKiBOV1BhcmFtZXRlcnNTUEkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDOEFDQTEzMTY2NzBEODkwMDRDMTk0MSAvKiBPYmpDT2JqZWN0R3JhcGgu
aCBpbiBIZWFkZXJzICovLAorCQkJCTQ5Q0VCNTAxMjZENkMyMkUwMDFBNEM2MyAvKiBPcGVyYXRp
bmdEYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNEVCNEFGRDI2OUNEN0YzMDBEMjk3QUUgLyog
T1NTdGF0ZVNQSS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NGNDdGRkIxNzI3NUM1NzAwOEFDQjkx
IC8qIFBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkVEQUE2MTExMjcxQzYwMEU3
Njc4QiAvKiBQYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTEyMzc1LDcgKzEyMzczLDYg
QEAKIAkJCQk1Q0I3QUZFNzIzQzY4MjA3MDBFNDlDRjMgLyogUmVzb3VyY2VMb2FkSW5mby5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNkJFOTY5Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFFNTRE
NENGMDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMDA2NkUxMTEw
RjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NkYzOEU4QzI0MTZFNjczMDA1OTM3NUEgLyogUnVubmluZ0JvYXJkU2VydmljZXNTUEku
aCBpbiBIZWFkZXJzICovLApAQCAtMTQyNjQsNiArMTQyNjEsNyBAQAogCQkJCTJEOTEzNDQ3MjEy
Q0Y5RjAwMDEyOEFGRCAvKiBOUFJ1bnRpbWVPYmplY3RNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkQ5MTM0NDgyMTJDRjlGMDAwMTI4QUZEIC8qIE5QUnVudGltZVV0aWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyRDkyQTc5NDIxMkI2QUQ0MDBGNDkzRkQgLyogTlBWYXJpYW50RGF0
YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUNFQjRGRTI2RDZDMTc3MDAxQTRDNjMgLyogT3Bl
cmF0aW5nRGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREEyOUEyODFDQkVCNjdBMDA5MDFD
Q0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDREEyOUEyQTFDQkVCNjdBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTEzNDQ5
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDU0MGRlOWE1NWFhNTZl
ZWMyZDllNjE3YjY2NzUxYzY4NGU1YmY5Ni4uNjVjNmFkYjVkMTgwMmU0NjdkM2U4NTQyZjE5YjE4
NGQ2ODNlNDBhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA4LTI1ICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBJVFAgbWVt
b3J5IHN0b3JlIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyOTUxMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzA3NDMyNTg+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW06CisKIDIwMjEtMDgt
MjQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChyMjgxNDczKTogWyBpT1MgJiBNYWNPUyBdIFRlc3RXZWJLaXRBUEkuUHJv
Y2Vzc1N3YXAuTmF2aWdhdGVUb0ludmFsaWRVUkwgaXMgdGltaW5nIG91dApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLm1tCmluZGV4IGViYzM1MjdlYmM1YjhjZjUzNzEzYWRiZjViNWE0NzNiYmZh
MGQ4OTMuLjEzMDNmMmVmMTkwZjI5YTUxYzkzMzRkYjE3YzMzMDkzNWY4ZTFmZTMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIHZvaWQgZW5z
dXJlSVRQRmlsZUlzQ3JlYXRlZCgpCiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWQ6Tk9dOwogfQogCi1URVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdy
YW5kZmF0aGVyQ2FsbGJhY2tEYXRhYmFzZSkKK1RFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywg
R3JhbmRmYXRoZXJDYWxsYmFjaykKIHsKICAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tXZWJzaXRl
RGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOwogCkBAIC0xMzUsNyArMTM1LDcgQEAgVEVTVChS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrRGF0YWJhc2UpCiAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CiB9CiAKLVRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0dXBEYXRhYmFzZSkKK1RF
U1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0dXAp
CiB7CiAgICAgYXV0byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0
YVN0b3JlXTsKIApAQCAtMTU2LDcgKzE1Niw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0dXBEYXRhYmFzZSkKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7CiB9CiAKLVRFU1QoUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgQ2hpbGRQcm9jZXNzZXNOb3RMYXVuY2hlZERhdGFiYXNlKQorVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBDaGlsZFByb2Nlc3Nlc05vdExhdW5jaGVkKQogewogICAgIC8vIEVu
c3VyZSB0aGUgc2hhcmVkIHByb2Nlc3MgcG9vbCBleGlzdHMgc28gdGhlIGRhdGEgc3RvcmUgb3Bl
cmF0aW9ucyB3ZSdyZSBhYm91dCB0byBkbyB3b3JrIHdpdGggaXQuCiAgICAgV0tQcm9jZXNzUG9v
bCAqc2hhcmVkUHJvY2Vzc1Bvb2wgPSBbV0tQcm9jZXNzUG9vbCBfc2hhcmVkUHJvY2Vzc1Bvb2xd
OwpAQCAtODU4LDI1NCArODU4LDYgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnkpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRp
bDo6cnVuKCZkb25lRmxhZyk7CiB9CiAKLVRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5RGF0YWJhc2UpCi17Ci0gICAgYXV0byAq
c2hhcmVkUHJvY2Vzc1Bvb2wgPSBbV0tQcm9jZXNzUG9vbCBfc2hhcmVkUHJvY2Vzc1Bvb2xdOwot
ICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9y
ZV07Ci0KLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdF0pOwotICAgIFtjb25maWd1cmF0aW9uIHNldFByb2Nlc3NQb29s
OiBzaGFyZWRQcm9jZXNzUG9vbF07Ci0gICAgY29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0
YVN0b3JlID0gZGF0YVN0b3JlOwotCi0gICAgYXV0byB3ZWJWaWV3MSA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgYXV0byB3ZWJWaWV3MiA9IGFk
b3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4
MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7Ci0gICAgYXV0byB3
ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
Ci0KLSAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJpbmc6QCJXZWJLaXQgVGVzdCIgYmFzZVVSTDpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwotICAgIFt3ZWJWaWV3
MSBfdGVzdF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Ci0gICAgW3dlYlZpZXcyIGxvYWRI
VE1MU3RyaW5nOkAiV2ViS2l0IFRlc3QiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJo
dHRwOi8vd2Via2l0Mi5vcmciXV07Ci0gICAgW3dlYlZpZXcyIF90ZXN0X3dhaXRGb3JEaWRGaW5p
c2hOYXZpZ2F0aW9uXTsKLSAgICBbd2ViVmlldzMgbG9hZEhUTUxTdHJpbmc6QCJXZWJLaXQgVGVz
dCIgYmFzZVVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQzLm9yZyJdXTsK
LSAgICBbd2ViVmlldzMgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwotCi0gICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKLQotICAg
IF9fYmxvY2sgYm9vbCBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtkYXRhU3RvcmUgX3NldFRoaXJk
UGFydHlDb29raWVCbG9ja2luZ01vZGU6dHJ1ZSBvbmx5T25TaXRlc1dpdGhvdXRVc2VySW50ZXJh
Y3Rpb246ZmFsc2UgY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgewotICAgICAgICBkb25lRmxh
ZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVG
bGFnKTsKLQotICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfY2xlYXJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOl4odm9pZCkgewotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0g
ICAgfV07Ci0KLSAgICBzdGF0aWMgYm9vbCBzdGF0aXN0aWNzVXBkYXRlZCA9IGZhbHNlOwotICAg
IFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihX
S1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKLSAgICAgICAgaWYgKCFb
bWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJTdGF0aXN0aWNzIFVwZGF0ZWQiXSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgc3RhdGlzdGljc1VwZGF0ZWQgPSB0cnVlOwotICAgIH1dOwot
Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7Ci0KLSAgICAvLyBTZXQg
dHdvIHRoaXJkIHBhcnRpZXMgdG8gYmUgcHJldmFsZW50LCBsZWF2ZSBldmlsMS5jb20gYXMgbm9u
LXByZXZhbGVudCB0byBlbnN1cmUKLSAgICAvLyB0aGlzIGNhbGwgcmV0dXJucyBhbGwgdGhpcmQg
cGFydGllcy4KLSAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtkYXRhU3RvcmUgX3NldFByZXZh
bGVudERvbWFpbjpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9ldmlsMi5jb20iXSBjb21w
bGV0aW9uSGFuZGxlcjogXih2b2lkKSB7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9
XTsKLQotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotCi0gICAgZG9u
ZUZsYWcgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9zZXRQcmV2YWxlbnREb21haW46W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDMuY29tIl0gY29tcGxldGlvbkhhbmRsZXI6IF4o
dm9pZCkgewotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLQotICAgIC8vIENhcHR1cmUgdGltZSBmb3Ig
Y29tcGFyaXNvbiBsYXRlci4KLSAgICBOU1RpbWVJbnRlcnZhbCBiZWZvcmVVcGRhdGluZ1RpbWUg
PSBbW05TRGF0ZSBkYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwotCi0gICAgLy8gU2VlZCB0
ZXN0IGRhdGEgaW4gdGhlIHdlYiBwcm9jZXNzJyBvYnNlcnZlci4KLQotICAgIC8vIGV2aWwxCi0g
ICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3NlZWRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZ1dpdGhGaXJzdFBhcnR5OltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB0aGlyZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovL2V2aWwxLmNvbSJdIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOk5PIGNvbXBs
ZXRpb25IYW5kbGVyOiBeKCkgewotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0g
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7Ci0KLSAgICBkb25lRmxhZyA9
IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
d2Via2l0Mi5vcmciXSB0aGlyZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2
aWwxLmNvbSJdIHNob3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOk5PIGNvbXBsZXRpb25IYW5kbGVy
OiBeKCkgewotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktp
dEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7Ci0KLSAgICAvLyBldmlsMgotICAgIGRvbmVGbGFn
ID0gZmFsc2U7Ci0gICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZWVkUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0ZvclRlc3RpbmdXaXRoRmlyc3RQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6
Ly93ZWJraXQub3JnIl0gdGhpcmRQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9l
dmlsMi5jb20iXSBzaG91bGRTY2hlZHVsZU5vdGlmaWNhdGlvbjpOTyBjb21wbGV0aW9uSGFuZGxl
cjogXigpIHsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotCi0gICAgLy8gZXZpbDMKLSAgICBkb25lRmxh
ZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vd2Via2l0Lm9yZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
ZXZpbDMuY29tIl0gc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246Tk8gY29tcGxldGlvbkhhbmRs
ZXI6IF4oKSB7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9IGZhbHNlOwotICAg
IFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5n
V2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Mi5vcmci
XSB0aGlyZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwzLmNvbSJdIHNo
b3VsZFNjaGVkdWxlTm90aWZpY2F0aW9uOk5PIGNvbXBsZXRpb25IYW5kbGVyOiBeKCkgewotICAg
ICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZkb25lRmxhZyk7Ci0gICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vz
c1Bvb2wgX3NlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZ1dpdGhGaXJzdFBhcnR5
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDMub3JnIl0gdGhpcmRQYXJ0eTpb
TlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9ldmlsMy5jb20iXSBzaG91bGRTY2hlZHVsZU5v
dGlmaWNhdGlvbjpOTyBjb21wbGV0aW9uSGFuZGxlcjogXigpIHsKLSAgICAgICAgZG9uZUZsYWcg
PSB0cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcp
OwotCi0gICAgc3RhdGlzdGljc1VwZGF0ZWQgPSBmYWxzZTsKLSAgICBbd2ViVmlldzEgbG9hZEhU
TUxTdHJpbmc6QCI8Ym9keT48c2NyaXB0PmNsb3NlKCk7PC9zY3JpcHQ+PC9ib2R5PiIgYmFzZVVS
TDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwotICAgIFt3ZWJW
aWV3MiBsb2FkSFRNTFN0cmluZzpAIjxib2R5PjxzY3JpcHQ+Y2xvc2UoKTs8L3NjcmlwdD48L2Jv
ZHk+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDIub3JnIl1d
OwotICAgIFt3ZWJWaWV3MyBsb2FkSFRNTFN0cmluZzpAIjxib2R5PjxzY3JpcHQ+Y2xvc2UoKTs8
L3NjcmlwdD48L2JvZHk+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dl
YmtpdDMub3JnIl1dOwotCi0gICAgLy8gV2FpdCBmb3IgdGhlIHN0YXRpc3RpY3MgdG8gYmUgdXBk
YXRlZCBpbiB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmc3RhdGlzdGljc1VwZGF0ZWQpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGhpcmQtcGFy
dHkgZXZpbDEgaXMgbm93IHJlZ2lzdGVyZWQgYXMgc3VicmVzb3VyY2UuCi0gICAgZG9uZUZsYWcg
PSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXJG
aXJzdFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB0aGly
ZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwxLmNvbSJdIGNvbXBsZXRp
b25IYW5kbGVyOiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlz
UmVnaXN0ZXJlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9IGZhbHNlOwot
ICAgIFtkYXRhU3RvcmUgX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZpcnN0UGFydHk6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Mi5vcmciXSB0aGlyZFBhcnR5OltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwxLmNvbSJdIGNvbXBsZXRpb25IYW5kbGVy
OiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlzUmVnaXN0ZXJl
ZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIHRoaXJkLXBh
cnR5IGV2aWwyIGlzIG5vdyByZWdpc3RlcmVkIGFzIHN1YnJlc291cmNlLgotICAgIGRvbmVGbGFn
ID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
Rmlyc3RQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl0gdGhp
cmRQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly9ldmlsMi5jb20iXSBjb21wbGV0
aW9uSGFuZGxlcjogXihCT09MIGlzUmVnaXN0ZXJlZCkgewotICAgICAgICBFWFBFQ1RfVFJVRShp
c1JlZ2lzdGVyZWQpOwotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRo
ZSB0aGlyZC1wYXJ0eSBldmlsMyBpcyBub3cgcmVnaXN0ZXJlZCBhcyBzdWJyZXNvdXJjZS4KLSAg
ICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtkYXRhU3RvcmUgX2lzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlckZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0
Lm9yZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDMuY29t
Il0gY29tcGxldGlvbkhhbmRsZXI6IF4oQk9PTCBpc1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoaXNSZWdpc3RlcmVkKTsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwotICAgIH1d
OwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotICAgIGRvbmVGbGFn
ID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
Rmlyc3RQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQyLm9yZyJdIHRo
aXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDMuY29tIl0gY29tcGxl
dGlvbkhhbmRsZXI6IF4oQk9PTCBpc1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXNSZWdpc3RlcmVkKTsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwotICAgIH1dOwotICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotICAgIGRvbmVGbGFnID0gZmFsc2U7
Ci0gICAgW2RhdGFTdG9yZSBfaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyRmlyc3RQYXJ0
eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQzLm9yZyJdIHRoaXJkUGFydHk6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDMuY29tIl0gY29tcGxldGlvbkhhbmRs
ZXI6IF4oQk9PTCBpc1JlZ2lzdGVyZWQpIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXNSZWdpc3Rl
cmVkKTsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotCi0gICAgLy8gQ29sbGVjdCB0aGUgSVRQIGRhdGEg
c3VtbWFyeSB3aGljaCBzaG91bGQgaW5jbHVkZSBhbGwgdGhpcmQgcGFydGllcyBpbiB0aGUKLSAg
ICAvLyBvcmRlcjogW2V2aWwzLmNvbSwgZXZpbDEuY29tLCBldmlsMi5jb21dIHNvcnRlZCBieSBu
dW1iZXIgb2YgZmlyc3QgcGFydGllcwotICAgIC8vIGl0IGFwcGVhcnMgdW5kZXIgb3IgcmVkaXJl
Y3RzIHRvLgotICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW2RhdGFTdG9yZSBfZ2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5Ol52b2lkKE5TQXJyYXk8X1dLUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1RoaXJkUGFydHkgKj4gKnRoaXJkUGFydHlEYXRhKQotICAgIHsKLSAgICAgICAg
RVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oW3RoaXJkUGFydHlEYXRhIGNvdW50XSksIDMpOwot
ICAgICAgICBOU0VudW1lcmF0b3IgKnRoaXJkUGFydHlEb21haW5zID0gW3RoaXJkUGFydHlEYXRh
IG9iamVjdEVudW1lcmF0b3JdOwotCi0gICAgICAgIC8vIGV2aWwzCi0gICAgICAgIF9XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5ICpldmlsM1RoaXJkUGFydHkgPSBbdGhpcmRQYXJ0
eURvbWFpbnMgbmV4dE9iamVjdF07Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShldmlsM1RoaXJk
UGFydHkudGhpcmRQYXJ0eURvbWFpbiwgQCJldmlsMy5jb20iKTsKLQotICAgICAgICBOU0VudW1l
cmF0b3IgKmV2aWwzRW51bWVyYXRvciA9IFtldmlsM1RoaXJkUGFydHkudW5kZXJGaXJzdFBhcnRp
ZXMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgICAgIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NG
aXJzdFBhcnR5ICpldmlsM0ZpcnN0UGFydHkxID0gW2V2aWwzRW51bWVyYXRvciBuZXh0T2JqZWN0
XTsKLSAgICAgICAgX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkgKmV2aWwzRmly
c3RQYXJ0eTIgPSBbZXZpbDNFbnVtZXJhdG9yIG5leHRPYmplY3RdOwotICAgICAgICBfV0tSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqZXZpbDNGaXJzdFBhcnR5MyA9IFtldmlsM0Vu
dW1lcmF0b3IgbmV4dE9iamVjdF07Ci0KLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV2aWwzRmly
c3RQYXJ0eTEuZmlyc3RQYXJ0eURvbWFpbiwgQCJ3ZWJraXQyLm9yZyIpOwotICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoZXZpbDNGaXJzdFBhcnR5Mi5maXJzdFBhcnR5RG9tYWluLCBAIndlYmtpdDMu
b3JnIik7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShldmlsM0ZpcnN0UGFydHkzLmZpcnN0UGFy
dHlEb21haW4sIEAid2Via2l0Lm9yZyIpOwotCi0gICAgICAgIEVYUEVDVF9GQUxTRShldmlsM0Zp
cnN0UGFydHkxLnRoaXJkUGFydHlTdG9yYWdlQWNjZXNzR3JhbnRlZCk7Ci0gICAgICAgIEVYUEVD
VF9GQUxTRShldmlsM0ZpcnN0UGFydHkyLnRoaXJkUGFydHlTdG9yYWdlQWNjZXNzR3JhbnRlZCk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShldmlsM0ZpcnN0UGFydHkzLnRoaXJkUGFydHlTdG9yYWdl
QWNjZXNzR3JhbnRlZCk7Ci0KLSAgICAgICAgTlNUaW1lSW50ZXJ2YWwgcmlnaHROb3cgPSBbW05T
RGF0ZSBkYXRlXSB0aW1lSW50ZXJ2YWxTaW5jZTE5NzBdOwotCi0gICAgICAgIC8vIENoZWNrIHRp
bWVzdGFtcCBmb3IgZXZpbDMgaXMgcmVwb3J0ZWQgYXMgYmVpbmcgd2l0aGluIHRoZSBjb3JyZWN0
IHJhbmdlLgotICAgICAgICBOU1RpbWVJbnRlcnZhbCBldmlsMVRpbWVMYXN0VXBkYXRlZCA9IGV2
aWwzRmlyc3RQYXJ0eTEudGltZUxhc3RVcGRhdGVkOwotICAgICAgICBOU1RpbWVJbnRlcnZhbCBl
dmlsMlRpbWVMYXN0VXBkYXRlZCA9IGV2aWwzRmlyc3RQYXJ0eTIudGltZUxhc3RVcGRhdGVkOwot
ICAgICAgICBOU1RpbWVJbnRlcnZhbCBldmlsM1RpbWVMYXN0VXBkYXRlZCA9IGV2aWwzRmlyc3RQ
YXJ0eTMudGltZUxhc3RVcGRhdGVkOwotCi0gICAgICAgIEVYUEVDVF9UUlVFKGJlZm9yZVVwZGF0
aW5nVGltZSA8IGV2aWwxVGltZUxhc3RVcGRhdGVkKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoYmVm
b3JlVXBkYXRpbmdUaW1lIDwgZXZpbDJUaW1lTGFzdFVwZGF0ZWQpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShiZWZvcmVVcGRhdGluZ1RpbWUgPCBldmlsM1RpbWVMYXN0VXBkYXRlZCk7Ci0KLSAgICAg
ICAgTlNUaW1lSW50ZXJ2YWwgZXZpbDFIb3VyRGlmZmVyZW5jZSA9IChyaWdodE5vdyAtIGV2aWwx
VGltZUxhc3RVcGRhdGVkKSAvIDM2MDA7Ci0gICAgICAgIE5TVGltZUludGVydmFsIGV2aWwySG91
ckRpZmZlcmVuY2UgPSAocmlnaHROb3cgLSBldmlsMlRpbWVMYXN0VXBkYXRlZCkgLyAzNjAwOwot
ICAgICAgICBOU1RpbWVJbnRlcnZhbCBldmlsM0hvdXJEaWZmZXJlbmNlID0gKHJpZ2h0Tm93IC0g
ZXZpbDNUaW1lTGFzdFVwZGF0ZWQpIC8gMzYwMDsKLQotICAgICAgICBFWFBFQ1RfVFJVRShldmls
MUhvdXJEaWZmZXJlbmNlIDwgMjQqMzYwMCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGV2aWwySG91
ckRpZmZlcmVuY2UgPCAyNCozNjAwKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoZXZpbDNIb3VyRGlm
ZmVyZW5jZSA8IDI0KjM2MDApOwotCi0gICAgICAgIC8vIGV2aWwxCi0gICAgICAgIF9XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NUaGlyZFBhcnR5ICpldmlsMVRoaXJkUGFydHkgPSBbdGhpcmRQYXJ0
eURvbWFpbnMgbmV4dE9iamVjdF07Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShldmlsMVRoaXJk
UGFydHkudGhpcmRQYXJ0eURvbWFpbiwgQCJldmlsMS5jb20iKTsKLQotICAgICAgICBOU0VudW1l
cmF0b3IgKmV2aWwxRW51bWVyYXRvciA9IFtldmlsMVRoaXJkUGFydHkudW5kZXJGaXJzdFBhcnRp
ZXMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgICAgIF9XS1Jlc291cmNlTG9hZFN0YXRpc3RpY3NG
aXJzdFBhcnR5ICpldmlsMUZpcnN0UGFydHkxPSBbZXZpbDFFbnVtZXJhdG9yIG5leHRPYmplY3Rd
OwotICAgICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqZXZpbDFGaXJz
dFBhcnR5MiA9IFtldmlsMUVudW1lcmF0b3IgbmV4dE9iamVjdF07Ci0KLSAgICAgICAgRVhQRUNU
X1dLX1NUUkVRKGV2aWwxRmlyc3RQYXJ0eTEuZmlyc3RQYXJ0eURvbWFpbiwgQCJ3ZWJraXQyLm9y
ZyIpOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXZpbDFGaXJzdFBhcnR5Mi5maXJzdFBhcnR5
RG9tYWluLCBAIndlYmtpdC5vcmciKTsKLQotICAgICAgICBFWFBFQ1RfRkFMU0UoZXZpbDFGaXJz
dFBhcnR5MS50aGlyZFBhcnR5U3RvcmFnZUFjY2Vzc0dyYW50ZWQpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoZXZpbDFGaXJzdFBhcnR5Mi50aGlyZFBhcnR5U3RvcmFnZUFjY2Vzc0dyYW50ZWQpOwot
Ci0gICAgICAgIC8vIENoZWNrIHRpbWVzdGFtcCBmb3IgZXZpbDEgaXMgcmVwb3J0ZWQgYXMgYmVp
bmcgd2l0aGluIHRoZSBjb3JyZWN0IHJhbmdlLgotICAgICAgICBldmlsMVRpbWVMYXN0VXBkYXRl
ZCA9IGV2aWwxRmlyc3RQYXJ0eTEudGltZUxhc3RVcGRhdGVkOwotICAgICAgICBldmlsMlRpbWVM
YXN0VXBkYXRlZCA9IGV2aWwxRmlyc3RQYXJ0eTIudGltZUxhc3RVcGRhdGVkOwotCi0gICAgICAg
IEVYUEVDVF9UUlVFKGJlZm9yZVVwZGF0aW5nVGltZSA8IGV2aWwxVGltZUxhc3RVcGRhdGVkKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoYmVmb3JlVXBkYXRpbmdUaW1lIDwgZXZpbDJUaW1lTGFzdFVw
ZGF0ZWQpOwotCi0gICAgICAgIGV2aWwxSG91ckRpZmZlcmVuY2UgPSAocmlnaHROb3cgLSBldmls
MVRpbWVMYXN0VXBkYXRlZCkgLyAzNjAwOwotICAgICAgICBldmlsMkhvdXJEaWZmZXJlbmNlID0g
KHJpZ2h0Tm93IC0gZXZpbDJUaW1lTGFzdFVwZGF0ZWQpIC8gMzYwMDsKLQotICAgICAgICBFWFBF
Q1RfVFJVRShldmlsMUhvdXJEaWZmZXJlbmNlIDwgMjQqMzYwMCk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKGV2aWwySG91ckRpZmZlcmVuY2UgPCAyNCozNjAwKTsKLQotICAgICAgICAvLyBldmlsMgot
ICAgICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0eSAqZXZpbDJUaGlyZFBh
cnR5ID0gW3RoaXJkUGFydHlEb21haW5zIG5leHRPYmplY3RdOwotICAgICAgICBFWFBFQ1RfV0tf
U1RSRVEoZXZpbDJUaGlyZFBhcnR5LnRoaXJkUGFydHlEb21haW4sIEAiZXZpbDIuY29tIik7Ci0K
LSAgICAgICAgTlNFbnVtZXJhdG9yICpldmlsMkVudW1lcmF0b3IgPSBbZXZpbDJUaGlyZFBhcnR5
LnVuZGVyRmlyc3RQYXJ0aWVzIG9iamVjdEVudW1lcmF0b3JdOwotICAgICAgICBfV0tSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqZXZpbDJGaXJzdFBhcnR5MSA9IFtldmlsMkVudW1l
cmF0b3IgbmV4dE9iamVjdF07Ci0KLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV2aWwyRmlyc3RQ
YXJ0eTEuZmlyc3RQYXJ0eURvbWFpbiwgQCJ3ZWJraXQub3JnIik7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShldmlsMkZpcnN0UGFydHkxLnRoaXJkUGFydHlTdG9yYWdlQWNjZXNzR3JhbnRlZCk7Ci0K
LSAgICAgICAgLy8gQ2hlY2sgdGltZXN0YW1wIGZvciBldmlsMiBpcyByZXBvcnRlZCBhcyBiZWlu
ZyB3aXRoaW4gdGhlIGNvcnJlY3QgcmFuZ2UuCi0gICAgICAgIGV2aWwxVGltZUxhc3RVcGRhdGVk
ID0gZXZpbDFGaXJzdFBhcnR5MS50aW1lTGFzdFVwZGF0ZWQ7Ci0KLSAgICAgICAgRVhQRUNUX1RS
VUUoYmVmb3JlVXBkYXRpbmdUaW1lIDwgZXZpbDFUaW1lTGFzdFVwZGF0ZWQpOwotCi0gICAgICAg
IGV2aWwxSG91ckRpZmZlcmVuY2UgPSAocmlnaHROb3cgLSBldmlsMVRpbWVMYXN0VXBkYXRlZCkg
LyAzNjAwOwotCi0gICAgICAgIEVYUEVDVF9UUlVFKGV2aWwxSG91ckRpZmZlcmVuY2UgPCAyNCoz
NjAwKTsKLQotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLX0KLQogVEVTVChSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCBNaWdyYXRlRGF0YUZyb21JbmNvcnJlY3RDcmVhdGVUYWJsZVNjaGVtYSkKIHsKICAg
ICBhdXRvICpzaGFyZWRQcm9jZXNzUG9vbCA9IFtXS1Byb2Nlc3NQb29sIF9zaGFyZWRQcm9jZXNz
UG9vbF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438493</attachid>
            <date>2021-09-17 11:30:29 -0700</date>
            <delta_ts>2021-09-17 16:46:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229512-20210917113028.patch</filename>
            <type>text/plain</type>
            <size>82562</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyNjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE1Y2YyMzA4NzkxZTRlYmU4
MDM5OTYxMTZmZmQwMzRlOTczNzEzMGYuLjIwYTA4MjI3OWFhNzJkMjYwZGU4MDU4MTgwMDc5ZDJm
NWQzMzhmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMjEtMDktMTcgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHVubmVj
ZXNzYXJ5IElUUCBtZW1vcnkgc3RvcmUgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NTEyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjY0
NDMwOT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMuIENvbmZpcm1lZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICBSZW1v
dmUgSVRQIE1lbW9yeSBzdG9yZS4gVGhpcyBpcyB0aGUgZmlyc3QgcGFydCBvZiBhIHR3byBwYXJ0
IG9wZXJhdGlvbiwKKyAgICAgICAgd2hpY2ggcmVtb3ZlcyB0aGUgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlIGNsYXNzLiBUaGUgbmV4dCAKKyAgICAgICAgc3RlcCB3aWxsIGJlIHJl
ZHVjaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBhbmQKKyAgICAgICAgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgdG8gb25lIHNpbmdsZSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUgY2xhc3MuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorCiAyMDIxLTA5LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ3Jhc2ggdW5kZXIgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpnZXRTdXBwb3J0ZWRU
eXBlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmNwcAppbmRleCBmMWYzMDFkMmM2NDAzMTE5OGI3NTA4MjZkZTIyMTlmMDJjNTYxYTFm
Li5lMzlkMjBhM2Q4NjkzYjk4Y2JkYjEyMWIxMmNhYTllY2Y5NDAwZTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTM0
LDcgKzM0LDYgQEAKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJQ
cml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuaCIKICNpbmNsdWRlICJQcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCkBA
IC05MjQsMzEgKzkyMyw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyCiAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwTGlzdCh0b3BGcmFtZUxvYWRlZFRoaXJkUGFydHlTY3JpcHRzUXVlcnks
IGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNjcmlwdHMsIHJlZ2lzdHJh
YmxlRG9tYWluSUQudmFsdWUoKSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBpZiAoIWlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byB0cmFuc2FjdGlvblNjb3BlID0gYmVnaW5UcmFuc2FjdGlvbklmTmVjZXNzYXJ5KCk7
Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0gbWVtb3J5U3RvcmUuZGF0YSgpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAg
ICAgICBhdXRvIHJlc3VsdCA9IGluc2VydE9ic2VydmVkRG9tYWluKHN0YXRpc3RpYyk7Ci0gICAg
ICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBJVFBfUkVMRUFTRV9MT0dfRVJST1IobV9z
ZXNzaW9uSUQsICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1
bGF0ZUZyb21NZW1vcnlTdG9yZSBpbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tcGxl
dGUsIGVycm9yIG1lc3NhZ2U6ICUiIFBSSVZBVEVfTE9HX1NUUklORywgdGhpcywgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1ha2UgYSBzZXBh
cmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBzbyB3ZQotICAgIC8vIGNh
biByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcwotICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjptZXJnZShXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQqIGN1cnJl
bnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIG90aGVyKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaAppbmRleCAxZTU0YWMwZDM4ZGEzZDJiNDJkYjdjNDQxMjZkNjNm
OWRiYzgwNmJjLi44NTI4YWFlM2I1MDI2MzRlMzAzZWMwNTMzYjY0MTQ1NzkwMThkZTExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApA
QCAtNDgsOCArNDgsNiBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkJ1Y2tldHNQ
ZXJTdGF0aXN0aWMgPSA1Owogc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdGF0aXN0
aWNzID0gNzsKIHN0YXRpYyBjb25zdGV4cHIgc3RkOjphcnJheTx1bnNpZ25lZCwgbnVtYmVyT2ZC
dWNrZXRzUGVyU3RhdGlzdGljPiBidWNrZXRTaXplcyB7eyAxLCAzLCAxMCwgNTAsIDEwMCB9fTsK
IAotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOwotCiB0eXBlZGVmIHN0
ZDo6cGFpcjxTdHJpbmcsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPj4gVGFibGVBbmRJbmRleFBhaXI7
CiAKIC8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0
aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KQEAg
LTU4LDcgKzU2LDYgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFN1c3BlbmRhYmxlV29ya1F1
ZXVlJiwgU2hvdWxkSW5jbHVkZUxvY2FsaG9zdCwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0
b3J5UGF0aCwgUEFMOjpTZXNzaW9uSUQpOwogICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZSgpOwogCi0gICAgdm9pZCBwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmKTsKICAgICB2b2lkIG1lcmdlU3RhdGlz
dGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOwogICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OGFkMTE1MzgzYzVlYmNkZDY1YWI4NjJmNzU1Y2U4ZGUwYTkzZmRhNS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDExNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5o
IgotCi0jaWYgRU5BQkxFKElOVEVMTElHRU5UX1RSQUNLSU5HX1BSRVZFTlRJT04pCi0KLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKLSNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzTWFuYWdlci5oIgotI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQcm94eS5oIgot
I2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudFN0b3JhZ2VB
Y2Nlc3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3MuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VzZXJHZXN0dXJlSW5kaWNhdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgotI2luY2x1ZGUgPHd0Zi9D
cm9zc1RocmVhZENvcGllci5oPgotI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N1c3BlbmRhYmxlV29ya1F1ZXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1jb25zdGV4cHIgdW5zaWduZWQgc3RhdGlz
dGljc01vZGVsVmVyc2lvbiB7IDE3IH07Ci0KLXN0cnVjdCBTdGF0aXN0aWNzTGFzdFNlZW4gewot
ICAgIFJlZ2lzdHJhYmxlRG9tYWluIGRvbWFpbjsKLSAgICBXYWxsVGltZSBsYXN0U2VlbjsKLX07
Ci0KLXN0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4s
IFVuaXF1ZVJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPj4mIHN0YXRpc3RpY3NNYXAsIFZlY3Rv
cjxTdGF0aXN0aWNzTGFzdFNlZW4+JiBzdGF0aXN0aWNzVG9QcnVuZSwgc2l6ZV90JiBudW1iZXJP
ZkVudHJpZXNUb1BydW5lKQotewotICAgIGlmIChzdGF0aXN0aWNzVG9QcnVuZS5zaXplKCkgPiBu
dW1iZXJPZkVudHJpZXNUb1BydW5lKSB7Ci0gICAgICAgIHN0ZDo6c29ydChzdGF0aXN0aWNzVG9Q
cnVuZS5iZWdpbigpLCBzdGF0aXN0aWNzVG9QcnVuZS5lbmQoKSwgW10oY29uc3QgU3RhdGlzdGlj
c0xhc3RTZWVuJiBhLCBjb25zdCBTdGF0aXN0aWNzTGFzdFNlZW4mIGIpIHsKLSAgICAgICAgICAg
IHJldHVybiBhLmxhc3RTZWVuIDwgYi5sYXN0U2VlbjsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDAsIGVuZCA9IHN0ZDo6bWluKG51bWJlck9mRW50cmllc1RvUHJ1
bmUsIHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSk7IGkgIT0gZW5kOyArK2ksIC0tbnVtYmVyT2ZF
bnRyaWVzVG9QcnVuZSkKLSAgICAgICAgc3RhdGlzdGljc01hcC5yZW1vdmUoc3RhdGlzdGljc1Rv
UHJ1bmVbaV0uZG9tYWluKTsKLX0KLQotUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiBzdG9yZSwgU3VzcGVuZGFibGVXb3JrUXVldWUmIHdvcmtRdWV1ZSwgU2hvdWxk
SW5jbHVkZUxvY2FsaG9zdCBzaG91bGRJbmNsdWRlTG9jYWxob3N0KQotICAgIDogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUsIHNob3VsZEluY2x1ZGVMb2NhbGhv
c3QpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBpbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwotfQotCi1ib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Ci17Ci0gICAgUkVMRUFT
RV9BU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHJldHVybiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5pc0VtcHR5KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuc3VyZVRoaXJkUGFydHlE
YXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5PiYgdGhpcmRQ
YXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBmaXJzdFBhcnR5RG9tYWluLCBib29sIHRoaXJkUGFydHlIYXNTdG9yYWdlQWNjZXNzKQot
ewotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGFGb3JT
cGVjaWZpY0ZpcnN0UGFydHkgdGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHkgeyBm
aXJzdFBhcnR5RG9tYWluLCB0aGlyZFBhcnR5SGFzU3RvcmFnZUFjY2VzcywgU2Vjb25kcyB7IFJl
c291cmNlTG9hZFN0YXRpc3RpY3M6Ok5vRXhpc3RpbmdUaW1lc3RhbXAgfX07Ci0gICAgdGhpcmRQ
YXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4uYXBwZW5kSWZOb3RDb250YWlucyh0
aGlyZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eSk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNpZmlj
Rmlyc3RQYXJ0eT4gZ2V0VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5z
KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHRoaXJkUGFydHlTdGF0aXN0aWMpCi17Ci0g
ICAgVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURhdGFG
b3JTcGVjaWZpY0ZpcnN0UGFydHk+IHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5
RG9tYWluczsKLQotICAgIGZvciAoYXV0byBmaXJzdFBhcnR5RG9tYWluIDogdGhpcmRQYXJ0eVN0
YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zKQotICAgICAgICBlbnN1cmVUaGly
ZFBhcnR5RGF0YUZvclNwZWNpZmljRmlyc3RQYXJ0eURvbWFpbih0aGlyZFBhcnR5RGF0YUZvclNw
ZWNpZmljRmlyc3RQYXJ0eURvbWFpbnMsIGZpcnN0UGFydHlEb21haW4sIHRoaXJkUGFydHlTdGF0
aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKGZpcnN0UGFy
dHlEb21haW4pKTsKLSAgICBmb3IgKGF1dG8gZmlyc3RQYXJ0eURvbWFpbiA6IHRoaXJkUGFydHlT
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykKLSAgICAgICAgZW5zdXJl
VGhpcmRQYXJ0eURhdGFGb3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW4odGhpcmRQYXJ0eURhdGFG
b3JTcGVjaWZpY0ZpcnN0UGFydHlEb21haW5zLCBmaXJzdFBhcnR5RG9tYWluLCB0aGlyZFBhcnR5
U3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlucyhmaXJz
dFBhcnR5RG9tYWluKSk7Ci0gICAgZm9yIChhdXRvIGZpcnN0UGFydHlEb21haW4gOiB0aGlyZFBh
cnR5U3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pCi0gICAgICAgIGVuc3Vy
ZVRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWluKHRoaXJkUGFydHlEYXRh
Rm9yU3BlY2lmaWNGaXJzdFBhcnR5RG9tYWlucywgZmlyc3RQYXJ0eURvbWFpbiwgdGhpcmRQYXJ0
eVN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnMoZmly
c3RQYXJ0eURvbWFpbikpOwotCi0gICAgcmV0dXJuIHRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNG
aXJzdFBhcnR5RG9tYWluczsKLX0KLQotc3RhdGljIGJvb2wgaGFzQmVlblRoaXJkUGFydHkoY29u
c3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIHJldHVybiAhc3Rh
dGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuaXNFbXB0eSgpCi0gICAgICAgIHx8
ICFzdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5pc0VtcHR5KCkKLSAg
ICAgICAgfHwgIXN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmlzRW1wdHko
KTsKLX0KLQotVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0
eURhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6YWdncmVnYXRlZFRoaXJk
UGFydHlEYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRh
PiB0aGlyZFBhcnR5RGF0YUxpc3Q7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWNzIDog
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGhhc0JlZW5U
aGlyZFBhcnR5KHN0YXRpc3RpY3MpICYmICh0aGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlKCkg
PT0gVGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTo6QWxsIHx8IHN0YXRpc3RpY3MtPmlzUHJl
dmFsZW50UmVzb3VyY2UpKQotICAgICAgICAgICAgdGhpcmRQYXJ0eURhdGFMaXN0LmFwcGVuZChX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhIHsgc3RhdGlzdGlj
cy0+cmVnaXN0cmFibGVEb21haW4sIGdldFRoaXJkUGFydHlEYXRhRm9yU3BlY2lmaWNGaXJzdFBh
cnR5RG9tYWlucyhzdGF0aXN0aWNzKSB9KTsKLSAgICB9Ci0gICAgc3RkOjpzb3J0KHRoaXJkUGFy
dHlEYXRhTGlzdC5yYmVnaW4oKSwgdGhpcmRQYXJ0eURhdGFMaXN0LnJlbmQoKSk7Ci0gICAgcmV0
dXJuIHRoaXJkUGFydHlEYXRhTGlzdDsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGRvbWFp
biA6IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgIGF1dG8mIHN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFp
bik7Ci0gICAgICAgICsrc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKLSAgICB9Ci19Ci0K
LXVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVjdXJzaXZlbHlH
ZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vy
c2l2ZUNhbGxzKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgaWYgKG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxs
c0luUmVkaXJlY3RUcmFjZUJhY2spIHsKLSAgICAgICAgLy8gTW9kZWwgdmVyc2lvbiAxNCBpbnZv
a2VzIGEgZGVsaWJlcmF0ZSByZS1jbGFzc2lmaWNhdGlvbiBvZiB0aGUgd2hvbGUgc2V0LgotICAg
ICAgICBpZiAoc3RhdGlzdGljc01vZGVsVmVyc2lvbiAhPSAxNCkKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCAiSGl0ICV1IHJlY3Vyc2l2ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJldHVy
bmluZyBlYXJseS4iLCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFj
ayk7Ci0gICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOwotICAgIH0KLQotICAg
IG51bWJlck9mUmVjdXJzaXZlQ2FsbHMrKzsKLQotICAgIGZvciAoYXV0byYgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdEZyb21Eb21haW4gOiByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20pIHsKLSAgICAgICAgYXV0byogc3RhdGlzdGljcyA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmdldChSZWdpc3RyYWJsZURvbWFpbiB7IHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RGcm9tRG9tYWluIH0pOwotICAgICAgICBpZiAoIXN0YXRpc3RpY3MgfHwgc3RhdGlz
dGljcy0+aXNQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAoZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLmFkZChzdGF0aXN0aWNzLT5yZWdpc3Ry
YWJsZURvbWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2Fs
bHMgPSByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21h
aW4oKnN0YXRpc3RpY3MsIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgbnVtYmVyT2ZSZWN1
cnNpdmVDYWxscyk7Ci0gICAgfQotICAgIGZvciAoYXV0byYgdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb21Eb21haW4gOiByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20pIHsKLSAgICAgICAgYXV0byogc3RhdGlzdGljcyA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LmdldChSZWdpc3RyYWJsZURvbWFpbiB7IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tRG9tYWlu
IH0pOwotICAgICAgICBpZiAoIXN0YXRpc3RpY3MgfHwgc3RhdGlzdGljcy0+aXNQcmV2YWxlbnRS
ZXNvdXJjZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoZG9tYWluc1RoYXRI
YXZlUmVkaXJlY3RlZFRvLmFkZChzdGF0aXN0aWNzLT5yZWdpc3RyYWJsZURvbWFpbikuaXNOZXdF
bnRyeSkKLSAgICAgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUdl
dEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oKnN0YXRpc3RpY3MsIGRv
bWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Ci19Ci0KLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0
ZWRUb1ByZXZhbGVudChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChyZXNvdXJjZVN0
YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3Ig
KGF1dG8mIHN1YnJlc291cmNlRG9tYWluUmVkaXJlY3RlZFRvIDogcmVzb3VyY2VTdGF0aXN0aWMu
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykgewotICAgICAgICBhdXRvKiBzdGF0aXN0aWNz
ID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0KFJlZ2lzdHJhYmxlRG9tYWluIHsgc3VicmVz
b3VyY2VEb21haW5SZWRpcmVjdGVkVG8gfSk7Ci0gICAgICAgIGlmIChzdGF0aXN0aWNzICYmIHN0
YXRpc3RpY3MtPmlzUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoYXV0
byYgdG9wRnJhbWVEb21haW5SZWRpcmVjdGVkVG8gOiByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvKSB7Ci0gICAgICAgIGF1dG8qIHN0YXRpc3RpY3MgPSBtX3Jlc291
cmNlU3RhdGlzdGljc01hcC5nZXQoUmVnaXN0cmFibGVEb21haW4geyB0b3BGcmFtZURvbWFpblJl
ZGlyZWN0ZWRUbyB9KTsKLSAgICAgICAgaWYgKHN0YXRpc3RpY3MgJiYgc3RhdGlzdGljcy0+aXNQ
cmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVz
b3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6aXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICBpZiAoIWRlYnVnTW9kZUVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlz
dGljLnJlZ2lzdHJhYmxlRG9tYWluID09IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSB8
fCByZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiA9PSBkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHNob3VsZFNraXAocmVz
b3VyY2VTdGF0aXN0aWMtPnJlZ2lzdHJhYmxlRG9tYWluKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3Rp
YykpCi0gICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgIGVsc2UgaWYgKCFyZXNvdXJj
ZVN0YXRpc3RpYy0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgICAgIG1hcmtB
c1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsK
LSAgICAgICAgICAgIGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy0+
aXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7Ci0gICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2Ug
PSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlz
dGljLCBjdXJyZW50UHJldmFsZW5jZSk7Ci0gICAgICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAh
PSBjdXJyZW50UHJldmFsZW5jZSkKLSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjphcmVBbGxUaGlyZFBh
cnR5Q29va2llc0Jsb2NrZWRVbmRlcihjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCi17Ci0gICAgaWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBh
cnR5Q29va2llQmxvY2tpbmdNb2RlOjpBbGwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKHRoaXJkUGFydHlDb29raWVCbG9ja2luZ01vZGUoKSA9PSBUaGlyZFBhcnR5Q29va2llQmxv
Y2tpbmdNb2RlOjpBbGxPblNpdGVzV2l0aG91dFVzZXJJbnRlcmFjdGlvbiAmJiAhaGFzSGFkVXNl
ckludGVyYWN0aW9uKHRvcEZyYW1lRG9tYWluLCBPcGVyYXRpbmdEYXRlc1dpbmRvdzo6TG9uZykp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1Db29raWVB
Y2Nlc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjb29raWVBY2Nlc3MoY29u
c3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKLXsKLSAgICBib29sIGlzUHJldmFsZW50ID0gcmVz
b3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIGhhZFVzZXJJbnRl
cmFjdGlvbiA9IHJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbjsKLQotICAgIGlm
ICghYXJlQWxsVGhpcmRQYXJ0eUNvb2tpZXNCbG9ja2VkVW5kZXIodG9wRnJhbWVEb21haW4pICYm
ICFpc1ByZXZhbGVudCkKLSAgICAgICAgcmV0dXJuIENvb2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tp
ZVBvbGljeTsKLQotICAgIGlmICghaGFkVXNlckludGVyYWN0aW9uKQotICAgICAgICByZXR1cm4g
Q29va2llQWNjZXNzOjpDYW5ub3RSZXF1ZXN0OwotICAgIAotICAgIHJldHVybiBDb29raWVBY2Nl
c3M6Ok9ubHlJZkdyYW50ZWQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURv
bWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBzdGQ6Om9wdGlvbmFs
PEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgUGFnZUlkZW50aWZpZXIgcGFnZUlELCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7Ci0gICAgc3dpdGNoIChjb29raWVBY2Nlc3Moc3ViRnJhbWVTdGF0aXN0aWMsIHRvcEZyYW1l
RG9tYWluKSkgewotICAgIGNhc2UgQ29va2llQWNjZXNzOjpDYW5ub3RSZXF1ZXN0OgotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIENv
b2tpZUFjY2Vzczo6QmFzZWRPbkNvb2tpZVBvbGljeToKLSAgICAgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1YkZyYW1lRG9tYWluID0gc3Vi
RnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+aGFzQ29v
a2llcyhzdWJGcmFtZURvbWFpbiwgW3N0b3JlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAg
ICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwotICAgICAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAg
Y2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdyYW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRsZWQgYmVs
b3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xh
dGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsSGFzU3Rv
cmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4s
IGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBbc3RvcmUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURv
bWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgRnJhbWVJZGVudGlmaWVyIGZy
YW1lSUQsIFBhZ2VJZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYg
c3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJGcmFtZURvbWFpbik7Ci0gICAgc3dpdGNoIChjb29raWVBY2Nlc3Moc3ViRnJh
bWVTdGF0aXN0aWMsIHRvcEZyYW1lRG9tYWluKSkgewotICAgIGNhc2UgQ29va2llQWNjZXNzOjpD
YW5ub3RSZXF1ZXN0OgotICAgICAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgp
KSkgewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkNhbm5vdCBncmFu
dCBzdG9yYWdlIGFjY2VzcyB0byAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29r
aWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJl
Y2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIENhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKSwgIicgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4g
dGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFj
dGlvbiBhcyBmaXJzdC1wYXJ0eS4iX3MpKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FzZSBDb29raWVBY2Nlc3M6OkJhc2VkT25Db29raWVQb2xpY3k6
Ci0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkpKSB7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdl
IGFjY2VzcyB0byAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHNpbmNlIGl0cyBjb29raWVzIGFyZSBu
b3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4gTm90ZSB0aGF0IHRoZSB1bmRlcmx5
aW5nIGNvb2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJsb2NrIHRoaXMgdGhpcmQtcGFydHkgZnJvbSBz
ZXR0aW5nIGNvb2tpZXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIltJVFBdIE5vIG5lZWQg
dG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJyJfcywgc3ViRnJhbWVEb21haW4uc3RyaW5nKCks
ICInIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cy4gTm90ZSB0aGF0IHRoZSB1bmRlcmx5aW5nIGNvb2tpZSBwb2xpY3kgbWF5IHN0aWxsIGJs
b2NrIHRoaXMgdGhpcmQtcGFydHkgZnJvbSBzZXR0aW5nIGNvb2tpZXMuIl9zKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNj
ZXNzKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDb29raWVBY2Nlc3M6Ok9ubHlJZkdy
YW50ZWQ6Ci0gICAgICAgIC8vIEhhbmRsZWQgYmVsb3cuCi0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGF1dG8gdXNlcldhc1Byb21wdGVkRWFybGllciA9IGhhc1VzZXJHcmFudGVkU3RvcmFn
ZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0aXN0aWMsIHRvcEZyYW1lRG9tYWluKTsK
LSAgICBpZiAodXNlcldhc1Byb21wdGVkRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd246Ok5vKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWShkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkp
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiQWJvdXQgdG8gYXNr
IHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICUi
IFBVQkxJQ19MT0dfU1RSSU5HICIgdW5kZXIgJSIgUFVCTElDX0xPR19TVFJJTkcgIiBvciBub3Qu
Iiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4u
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNv
bGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1h
a2VTdHJpbmcoIltJVFBdIEFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0
byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAnIl9zLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKSwg
IicgdW5kZXIgJyJfcywgdG9wRnJhbWVEb21haW4uc3RyaW5nKCksICInIG9yIG5vdC4iX3MpKTsK
LSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVz
OjpSZXF1aXJlc1VzZXJQcm9tcHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPT0gU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duOjpZ
ZXMpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMg
Z3JhbnRlZCB0byAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHVuZGVyICUiIFBVQkxJQ19MT0dfU1RS
SU5HICIuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2Fz
dENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6Oklu
Zm8sIG1ha2VTdHJpbmcoIltJVFBdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICciX3Ms
IHN1YkZyYW1lRG9tYWluLnN0cmluZygpLCAiJyB1bmRlciAnIl9zLCB0b3BGcmFtZURvbWFpbi5z
dHJpbmcoKSwgIicuIl9zKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdWJGcmFtZVN0YXRp
c3RpYy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKys7Ci0K
LSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwg
V1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVk
RWFybGllciwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoU3RvcmFnZUFjY2Vzc1dhc0dyYW50ZWQgd2FzR3JhbnRlZCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdhc0dyYW50ZWQgPT0gU3RvcmFnZUFjY2Vzc1dhc0dy
YW50ZWQ6OlllcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nl
c3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3MsIFBhZ2VJZGVudGlmaWVyIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVy
RG9tYWluKQotewotICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3Bl
bmVyRG9tYWluKTsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVyRG9tYWluKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoVU5MSUtFTFkoZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPKElUUERlYnVnLCAiW1RlbXBvcmFyeSBjb21iYXRpYmlsaXR5IGZp
eF0gU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICUiIFBVQkxJQ19MT0dfU1RSSU5HICIg
dW5kZXIgb3BlbmVyIHBhZ2UgZnJvbSAlIiBQVUJMSUNfTE9HX1NUUklORyAiLCB3aXRoIHVzZXIg
aW50ZXJhY3Rpb24gaW4gdGhlIG9wZW5lZCB3aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgZGVidWdCcm9hZGNhc3RDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpJVFBEZWJ1ZywgTWVzc2FnZUxldmVsOjpJbmZvLCBtYWtlU3RyaW5nKCJbSVRQXSBT
dG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJyJfcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzLnN0cmluZygpLCAiJyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICciX3MsIG9wZW5lckRv
bWFpbi5zdHJpbmcoKSwgIicsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdp
bmRvdy4iX3MpKTsKLSAgICB9Ci0KLSAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZN
b3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwg
c3RkOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6
Tm8sIFN0b3JhZ2VBY2Nlc3NTY29wZTo6UGVyUGFnZSwgW10oU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQpIHsgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJh
bWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIFBhZ2VJ
ZGVudGlmaWVyIHBhZ2VJRCwgU3RvcmFnZUFjY2Vzc1Byb21wdFdhc1Nob3duIHByb21wdFdhc1No
b3duLCBTdG9yYWdlQWNjZXNzU2NvcGUgc2NvcGUsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1dhc0dyYW50ZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHByb21wdFdhc1Nob3duID09IFN0b3Jh
Z2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6WWVzKSB7Ci0gICAgICAgIGF1dG8mIHN1YkZyYW1lU3Rh
dGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3Vi
RnJhbWVEb21haW4pOwotICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuaGFkVXNlcklu
dGVyYWN0aW9uKTsKLSAgICAgICAgc3ViRnJhbWVTdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zLmFkZCh0b3BGcmFtZURvbWFpbik7Ci0gICAgfQotICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRXYXNTaG93biwgc2NvcGUsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHN0ZDo6b3B0
aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBQYWdlSWRlbnRpZmllciBwYWdlSUQsIFN0
b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93biBwcm9tcHRXYXNTaG93bk5vd09yRWFybGllciwgU3Rv
cmFnZUFjY2Vzc1Njb3BlIHNjb3BlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nl
c3NXYXNHcmFudGVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzdWJGcmFtZURvbWFpbiA9PSB0b3BGcmFtZURvbWFp
bikgewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzV2FzR3JhbnRlZDo6
WWVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChwcm9tcHRXYXNTaG93bk5v
d09yRWFybGllciA9PSBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246OlllcykgewotICAgICAg
ICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKLSAgICAgICAgQVNTRVJUKHN1YkZyYW1l
U3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbik7Ci0gICAgICAgIEFTU0VSVChzdWJGcmFtZVN0
YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnModG9wRnJh
bWVEb21haW4pKTsKLSAgICAgICAgc3ViRnJhbWVTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUgPSBXYWxsVGltZTo6bm93KCk7Ci0gICAgfQotCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFt
ZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc2NvcGUsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9w
RnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgc2NvcGUsIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdG9yZV0oU3RvcmFnZUFjY2Vzc1dhc0dyYW50
ZWQgd2FzR3JhbnRlZCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1
ZXVlKCkuZGlzcGF0Y2goW3dhc0dyYW50ZWQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHdhc0dyYW50ZWQpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9t
YWlucykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoYXV0
byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgICAgICBz
dGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7Ci0gICAgfQotfQotCi1WZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGlmICghZGVidWdNb2RlRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9CbG9jazsKLSAg
ICBkb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotCi0gICAgYXV0byYg
c3RhdGljU2Vzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwotICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKHN0YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlOjpIaWdoKTsKLSAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdT
dGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKLQotICAgIGlmICghZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0
YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7Ci0gICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKG1hbnVhbFJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKLSAgICAgICAgZG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKSk7Ci0KLSAgICAgICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkg
ewotICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhJVFBEZWJ1ZywgIkRpZCBzZXQgJSIgUFVC
TElDX0xPR19TVFJJTkcgIiBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBv
ZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBkZWJ1Z0Jyb2FkY2FzdENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdlTGV2ZWw6OkluZm8sIG1ha2VTdHJp
bmcoIltJVFBdIERpZCBzZXQgJyJfcywgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0
cmluZygpLCAiJyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAg
RGVidWcgTW9kZS4iX3MpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZG9t
YWluc1RvQmxvY2s7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJh
bWUsIFNlY29uZHMgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCwgYm9vbCB3YXNQb3Rl
bnRpYWxseUluaXRpYXRlZEJ5VXNlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJn
ZXREb21haW4gPT0gdG9wRnJhbWVEb21haW47Ci0gICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VE
b21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOwotCi0gICAgYm9v
bCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzTWFpbkZyYW1lICYm
ICEoYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291
cmNlRG9tYWluc1NhbWVTaXRlKSkgewotICAgICAgICBhdXRvJiB0YXJnZXRTdGF0aXN0aWNzID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKLSAgICAgICAgdGFyZ2V0U3RhdGlzdGljcy5sYXN0U2VlbiA9IFJlc291cmNlTG9hZFN0YXRp
c3RpY3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSk7Ci0gICAgICAgIGlm
ICh0YXJnZXRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRkKHRvcEZy
YW1lRG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVk
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1l
U2l0ZSkgewotICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKLSAgICAgICAgICAgIGF1dG8mIHJl
ZGlyZWN0aW5nRG9tYWluU3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7Ci0gICAgICAgICAgICBib29sIHdhc05hdmln
YXRlZEFmdGVyU2hvcnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24gPSAhd2FzUG90ZW50aWFs
bHlJbml0aWF0ZWRCeVVzZXIgJiYgZGVsYXlBZnRlck1haW5GcmFtZURvY3VtZW50TG9hZCA8IHBh
cmFtZXRlcnMoKS5taW5EZWxheUFmdGVyTWFpbkZyYW1lRG9jdW1lbnRMb2FkVG9Ob3RCZUFSZWRp
cmVjdDsKLSAgICAgICAgICAgIGlmIChpc1JlZGlyZWN0IHx8IHdhc05hdmlnYXRlZEFmdGVyU2hv
cnREZWxheVdpdGhvdXRVc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAocmVk
aXJlY3RpbmdEb21haW5TdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRh
cmdldERvbWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dl
cmVVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZWRpcmVjdCAmJiByZWRp
cmVjdGluZ0RvbWFpblN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2Ft
ZVNpdGVTdHJpY3RFbmZvcmNlbWVudC5hZGQodGFyZ2V0RG9tYWluKS5pc05ld0VudHJ5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oSVRQRGVidWcsICJEaWQgc2V0
ICUiIFBVQkxJQ19MT0dfU1RSSU5HICIgYXMgbWFraW5nIGEgdG9wIGZyYW1lIHJlZGlyZWN0IHRv
ICUiIFBVQkxJQ19MT0dfU1RSSU5HICIuIiwgc291cmNlRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHRhcmdldERvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnQnJvYWRjYXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6
SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6SW5mbywgbWFrZVN0cmluZygiRGlkIHNldCAnIiwgc291
cmNlRG9tYWluLnN0cmluZygpLCAiJyBhcyBtYWtpbmcgYSB0b3AgZnJhbWUgcmVkaXJlY3QgdG8g
JyIsIHRhcmdldERvbWFpbi5zdHJpbmcoKSwgIicuIikpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGF1dG8mIHRhcmdldFN0YXRpc3Rp
Y3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXRE
b21haW4pOwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTdGF0aXN0aWNzLnRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbS5hZGQoc291cmNlRG9tYWluKS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKGlzUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIGF1dG8mIHJlZGly
ZWN0aW5nRG9tYWluU3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7Ci0gICAgICAgICAgICBpZiAocmVkaXJlY3RpbmdE
b21haW5TdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uYWRkKHRhcmdldERv
bWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgYXV0byYgdGFyZ2V0U3RhdGlzdGljcyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0U3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
YWRkKHNvdXJjZURvbWFpbikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBzdGF0aXN0aWNz
V2VyZVVwZGF0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCkKLSAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZk5lY2Vzc2FyeSgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgIGJvb2wg
ZGlkSGF2ZVByZXZpb3VzVXNlckludGVyYWN0aW9uID0gc3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb247Ci0gICAgc3RhdGlzdGljcy5oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwotICAgIHN0
YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6bm93KCk7
Ci0gICAgaWYgKGRpZEhhdmVQcmV2aW91c1VzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0Nyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29y
YXRpb24oY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYgZnJvbURvbWFpbiwgY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mIHRvRG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIEFTU0VSVChmcm9tRG9tYWluICE9IHRvRG9tYWluKTsKLQotICAgIGF1dG8mIHRvU3Rh
dGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRv
RG9tYWluKTsKLSAgICB0b1N0YXRpc3RpY3MudG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tLmFk
ZChmcm9tRG9tYWluKTsKLSAgICAKLSAgICBhdXRvJiBmcm9tU3RhdGlzdGljcyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGZyb21Eb21haW4pOwotICAgIGlm
IChmcm9tU3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICB0b1N0YXRpc3Rp
Y3MuZ290TGlua0RlY29yYXRpb25Gcm9tUHJldmFsZW50UmVzb3VyY2UgPSB0cnVlOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rp
b24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgYm9vbCBkaWRIYXZlUHJldmlvdXNVc2Vy
SW50ZXJhY3Rpb24gPSBzdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbjsKLSAgICBzdGF0aXN0
aWNzLmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotICAgIHN0YXRpc3RpY3MubW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUgPSB7IH07Ci0gICAgaWYgKCFkaWRIYXZlUHJldmlvdXNVc2Vy
SW50ZXJhY3Rpb24pIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpo
YXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdGF0aXN0aWNzID0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZ2V0KGRvbWFpbik7Ci0gICAgcmV0dXJuIHN0YXRpc3RpY3MgPyBoYXNIYWRV
bmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oKnN0YXRpc3RpY3MsIG9wZXJhdGluZ0RhdGVz
V2luZG93KSA6IGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3Vy
Y2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKHJlc291
cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA9IHRydWU7Ci0gICAgcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBuZXdQcmV2YWxlbmNlID09IFJl
c291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoOwotICAgIEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+IGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbzsKLSAgICByZWN1cnNpdmVseUdldEFs
bERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4ocmVzb3VyY2VTdGF0aXN0aWMs
IGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgMCk7Ci0gICAgZm9yIChhdXRvJiBkb21haW4g
OiBkb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG8pIHsKLSAgICAgICAgYXV0byogc3RhdGlzdGlj
cyA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmdldChkb21haW4pOwotICAgICAgICBpZiAoIXN0
YXRpc3RpY3MpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQVNTRVJUKCFzdGF0aXN0
aWNzLT5pc1ByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgc3RhdGlzdGljcy0+aXNQcmV2YWxl
bnRSZXNvdXJjZSA9IHRydWU7Ci0gICAgfQotfQotICAgIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKGRhdGFSZWNvcmRzQmVpbmdSZW1v
dmVkKCkpIHsKLSAgICAgICAgbV9kYXRhUmVjb3JkUmVtb3ZhbENvbXBsZXRpb25IYW5kbGVycy5h
cHBlbmQoW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LmFwcGVuZCgi
UmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzOlxuXG4iKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBzb3J0
ZWRNYXBFbnRyaWVzOwotICAgIGZvciAoYXV0byYgbWFwRW50cnkgOiBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgc29ydGVkTWFwRW50cmllcy5hcHBlbmQobWFwRW50
cnktPnRvU3RyaW5nKCkpOwotCi0gICAgc3RkOjpzb3J0KHNvcnRlZE1hcEVudHJpZXMuYmVnaW4o
KSwgc29ydGVkTWFwRW50cmllcy5lbmQoKSwgV1RGOjpjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4p
OwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IHNvcnRlZE1hcEVudHJpZXMpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoZW50cnkpOwotICAgIAotICAgIGF1dG8gdGhpcmRQYXJ0eURhdGEgPSBhZ2dy
ZWdhdGVkVGhpcmRQYXJ0eURhdGEoKTsKLSAgICBpZiAoIXRoaXJkUGFydHlEYXRhLmlzRW1wdHko
KSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbklUUCBEYXRhOlxuIik7Ci0gICAgICAgIGZv
ciAoYXV0byB0aGlyZFBhcnR5IDogdGhpcmRQYXJ0eURhdGEpIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQodGhpcmRQYXJ0eS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0
LnRvU3RyaW5nKCkpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBj
b25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKHNob3Vs
ZFNraXAoZG9tYWluKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byogc3RhdGlz
dGljcyA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmdldChkb21haW4pOwotICAgIHJldHVybiBz
dGF0aXN0aWNzID8gc3RhdGlzdGljcy0+aXNQcmV2YWxlbnRSZXNvdXJjZSA6IGZhbHNlOwotfQot
Ci1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91bGRTa2lwKGRvbWFpbikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvKiBzdGF0aXN0aWNzID0gbV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0KGRvbWFpbik7Ci0gICAgcmV0dXJuIHN0YXRpc3RpY3Mg
PyBzdGF0aXN0aWNzLT5pc1ByZXZhbGVudFJlc291cmNlICYmIHN0YXRpc3RpY3MtPmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlIDogZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBhdXRvKiBzdGF0aXN0aWNzID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZ2V0KHN1YnJl
c291cmNlRG9tYWluKTsKLSAgICByZXR1cm4gc3RhdGlzdGljcyA/IHN0YXRpc3RpY3MtPnN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnModG9wRnJhbWVEb21haW4pIDogZmFs
c2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWlu
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvKiBzdGF0aXN0aWNzID0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZ2V0KHN1YkZyYW1lRG9tYWluKTsKLSAgICByZXR1cm4gc3RhdGlz
dGljcyA/IHN0YXRpc3RpY3MtPnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnMo
dG9wRnJhbWVEb21haW4pIDogZmFsc2U7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3Rl
ZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21h
aW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGF1dG8qIHN0YXRpc3RpY3MgPSBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5nZXQocmVkaXJlY3RlZEZyb21Eb21haW4pOwotICAgIHJldHVybiBzdGF0aXN0aWNzID8gc3Rh
dGlzdGljcy0+c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5jb250YWlucyhyZWRpcmVjdGVk
VG9Eb21haW4pIDogZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBz
dGF0aXN0aWNzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKLSAgICBzdGF0aXN0aWNzLmlzUHJldmFsZW50UmVzb3VyY2UgPSBmYWxzZTsKLSAg
ICBzdGF0aXN0aWNzLmlzVmVyeVByZXZhbGVudFJlc291cmNlID0gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICBzdGF0aXN0aWNz
LmdyYW5kZmF0aGVyZWQgPSB2YWx1ZTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0
byogc3RhdGlzdGljcyA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmdldChkb21haW4pOwotICAg
IHJldHVybiBzdGF0aXN0aWNzID8gc3RhdGlzdGljcy0+Z3JhbmRmYXRoZXJlZCA6IGZhbHNlOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYgc3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKLSAgICBzdGF0
aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuYWRkKHRvcEZyYW1lRG9tYWluKTsK
LSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0
aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KLSAgICBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvJiBzdGF0aXN0aWNzID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwotICAg
IHN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5hZGQodG9wRnJhbWVE
b21haW4pOwotICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBh
IHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgotICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7Ci0g
ICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZChyZWRpcmVjdERv
bWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEg
c3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KLSAgICBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7Ci0g
ICAgc3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uYWRkKHJlZGlyZWN0
RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUg
YSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0
IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3MgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7Ci0gICAgc3RhdGlzdGlj
cy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLmFkZChyZWRpcmVjdERvbWFpbik7Ci0gICAgc3Rh
dGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvU2luY2VTYW1lU2l0ZVN0cmljdEVuZm9y
Y2VtZW50LmFkZChyZWRpcmVjdERvbWFpbik7Ci0gICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtl
IHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRv
bWFpbi4KLSAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihy
ZWRpcmVjdERvbWFpbik7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8mIHN0YXRpc3RpY3Mg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURv
bWFpbik7Ci0gICAgc3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uYWRkKHJl
ZGlyZWN0RG9tYWluKTsKLSAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNv
IGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgotICAgIGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWlu
KTsKLX0KLQotUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShk
b21haW4sIFsmZG9tYWluXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFJlc291cmNl
TG9hZFN0YXRpc3RpY3M+KGRvbWFpbik7Ci0gICAgfSkuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1z
dGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29k
ZXIoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9k
ZWxWZXJzaW9uKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKTsKLQotICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoImJyb3dzaW5n
U3RhdGlzdGljcyIsIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmJlZ2luKCksIG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgY29uc3Qg
YXV0byYgZG9tYWluKSB7Ci0gICAgICAgIGRvbWFpbi52YWx1ZS0+ZW5jb2RlKGVuY29kZXJJbm5l
cik7Ci0gICAgfSk7Ci0KLSAgICBhdXRvJiBvcGVyYXRpbmdEYXRlcyA9IHRoaXMtPm9wZXJhdGlu
Z0RhdGVzKCk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlT2JqZWN0cygib3BlcmF0aW5nRGF0ZXMiLCBv
cGVyYXRpbmdEYXRlcy5iZWdpbigpLCBvcGVyYXRpbmdEYXRlcy5lbmQoKSwgW10oS2V5ZWRFbmNv
ZGVyJiBlbmNvZGVySW5uZXIsIE9wZXJhdGluZ0RhdGUgZGF0ZSkgewotICAgICAgICBlbmNvZGVy
SW5uZXIuZW5jb2RlRG91YmxlKCJkYXRlIiwgZGF0ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGVuY29kZXI7Ci19Ci0KLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoS2V5ZWRE
ZWNvZGVyJiBkZWNvZGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgdW5zaWduZWQgdmVyc2lvbk9uRGlzazsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlVUludDMy
KCJ2ZXJzaW9uIiwgdmVyc2lvbk9uRGlzaykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh2
ZXJzaW9uT25EaXNrID4gc3RhdGlzdGljc01vZGVsVmVyc2lvbikgewotICAgICAgICBXVEZMb2dB
bHdheXMoIkZvdW5kIHJlc291cmNlIGxvYWQgc3RhdGlzdGljcyBvbiBkaXNrIHdpdGggbW9kZWwg
dmVyc2lvbiAldSB3aGVyZWFzIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIGlzICV1LiBS
ZXNldHRpbmcuIiwgdmVyc2lvbk9uRGlzaywgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcDsKLSAgICBpZiAoZGVjb2Rlci5kZWNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdU
aW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKSkKLSAgICAgICAgc2V0RW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcChXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpOwotICAgIGVsc2UKLSAgICAgICAgY2xlYXJFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7Ci0KLSAgICBWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4gbG9hZGVkU3RhdGlzdGljczsKLSAgICBib29sIHN1Y2NlZWRlZCA9IGRlY29kZXIuZGVj
b2RlT2JqZWN0cygiYnJvd3NpbmdTdGF0aXN0aWNzIiwgbG9hZGVkU3RhdGlzdGljcywgW3ZlcnNp
b25PbkRpc2tdKEtleWVkRGVjb2RlciYgZGVjb2RlcklubmVyLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBzdGF0aXN0aWNzKSB7Ci0gICAgICAgIHJldHVybiBzdGF0aXN0aWNzLmRlY29kZShkZWNv
ZGVySW5uZXIsIHZlcnNpb25PbkRpc2spOwotICAgIH0pOwotCi0gICAgaWYgKCFzdWNjZWVkZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKGxvYWRlZFN0
YXRpc3RpY3MpKTsKLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0KLSAgICBW
ZWN0b3I8T3BlcmF0aW5nRGF0ZT4gb3BlcmF0aW5nRGF0ZXM7Ci0gICAgc3VjY2VlZGVkID0gZGVj
b2Rlci5kZWNvZGVPYmplY3RzKCJvcGVyYXRpbmdEYXRlcyIsIG9wZXJhdGluZ0RhdGVzLCBbXShL
ZXllZERlY29kZXImIGRlY29kZXIsIE9wZXJhdGluZ0RhdGUmIGRhdGUpIHsKLSAgICAgICAgZG91
YmxlIHZhbHVlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRG91YmxlKCJkYXRlIiwgdmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGRhdGUgPSBPcGVyYXRp
bmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKHZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0pOwotCi0gICAgaWYgKCFzdWNjZWVkZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1lcmdlT3BlcmF0aW5nRGF0ZXMoV1RGTW92ZShvcGVyYXRpbmdE
YXRlcykpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xl
YXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuY2xlYXIoKTsKLSAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7Ci0KLSAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKLQotICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdn
cmVnYXRvcl0geyB9KTsKLQotICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5zVG9CbG9ja0FuZERl
bGV0ZUNvb2tpZXNGb3IgPSBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsK
LSAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29va2llc0ZvciBkb21haW5zVG9CbG9jayB7
IHJlZ2lzdHJhYmxlRG9tYWluc1RvQmxvY2tBbmREZWxldGVDb29raWVzRm9yLCB7IH0sIHsgfSwg
eyB9fTsKLSAgICB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ss
IFtjYWxsYmFja0FnZ3JlZ2F0b3JdIHsgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjptZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+JiYgc3RhdGlzdGljcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljcykgewotICAgICAgICBhdXRv
IHJlc3VsdCA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShzdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4sIFsmc3RhdGlzdGljXSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPihXVEZNb3ZlKHN0YXRpc3RpYykpOwotICAgICAg
ICB9KTsKLSAgICAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUtPm1lcmdlKHN0YXRpc3RpYyk7Ci0gICAgfQotfQotCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkQmxvY2tBbmRLZWVwQ29va2ll
cyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMpCi17Ci0gICAgcmV0dXJu
IHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmIHN0YXRpc3RpYy5oYWRVc2VySW50ZXJh
Y3Rpb247Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91
bGRCbG9ja0FuZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0
aXN0aWMpCi17Ci0gICAgcmV0dXJuIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlICYmICFz
dGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uOwotfQotCi1TdG9yYWdlQWNjZXNzUHJvbXB0V2Fz
U2hvd24gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0
b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0
YXRpc3RpYywgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGZpcnN0UGFydHlEb21haW4pCi17Ci0g
ICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMuY29u
dGFpbnMoZmlyc3RQYXJ0eURvbWFpbikgPyBTdG9yYWdlQWNjZXNzUHJvbXB0V2FzU2hvd246Olll
cyA6IFN0b3JhZ2VBY2Nlc3NQcm9tcHRXYXNTaG93bjo6Tm87Ci19Ci0KLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNU
b0Jsb2NrQW5kRGVsZXRlQ29va2llc0ZvcjsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3I7Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiBkb21haW5zV2l0aFVzZXJJbnRlcmFjdGlvbkFzRmlyc3RQYXJ0eTsKLSAgICBmb3Ig
KGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihy
ZXNvdXJjZVN0YXRpc3RpYywgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpKSB7Ci0gICAgICAg
ICAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMtPmlzUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAg
ICAgICAgICAgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0Zvci5hcHBlbmQocmVzb3VyY2VT
dGF0aXN0aWMtPnJlZ2lzdHJhYmxlRG9tYWluLmlzb2xhdGVkQ29weSgpKTsKLSAgICAgICAgICAg
IGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5LmFwcGVuZChyZXNvdXJjZVN0
YXRpc3RpYy0+cmVnaXN0cmFibGVEb21haW4pOwotICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNl
U3RhdGlzdGljLT5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAgZG9tYWluc1RvQmxv
Y2tBbmREZWxldGVDb29raWVzRm9yLmFwcGVuZChyZXNvdXJjZVN0YXRpc3RpYy0+cmVnaXN0cmFi
bGVEb21haW4pOwotICAgIH0KLQotICAgIGlmIChkb21haW5zVG9CbG9ja0FuZERlbGV0ZUNvb2tp
ZXNGb3IuaXNFbXB0eSgpICYmIGRvbWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IuaXNFbXB0
eSgpICYmIGRvbWFpbnNXaXRoVXNlckludGVyYWN0aW9uQXNGaXJzdFBhcnR5LmlzRW1wdHkoKSAm
JiAhZGVidWdNb2RlRW5hYmxlZCgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0Jsb2NrQ29v
a2llc0ZvciBkb21haW5zVG9CbG9jayB7IGRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zv
ciwgZG9tYWluc1RvQmxvY2tCdXRLZWVwQ29va2llc0ZvciwgZG9tYWluc1dpdGhVc2VySW50ZXJh
Y3Rpb25Bc0ZpcnN0UGFydHksIHsgfSB9OwotCi0gICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQo
KSAmJiAoIWRvbWFpbnNUb0Jsb2NrQW5kRGVsZXRlQ29va2llc0Zvci5pc0VtcHR5KCkgfHwgIWRv
bWFpbnNUb0Jsb2NrQnV0S2VlcENvb2tpZXNGb3IuaXNFbXB0eSgpKSkKLSAgICAgICAgZGVidWdM
b2dEb21haW5zSW5CYXRjaGVzKCJBcHBseWluZyBjcm9zcy1zaXRlIHRyYWNraW5nIHJlc3RyaWN0
aW9ucyIsIGRvbWFpbnNUb0Jsb2NrKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwg
ZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JI
YW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3Rv
cmUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dl
YWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSh3ZWFrVGhp
cy0+ZGVidWdMb2dnaW5nRW5hYmxlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKElUUERlYnVnLCAiRG9uZSBhcHBseWluZyBjcm9zcy1zaXRlIHRyYWNraW5nIHJl
c3RyaWN0aW9ucy4iKTsKLSAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmRlYnVnQnJvYWRj
YXN0Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SVRQRGVidWcsIE1lc3NhZ2VMZXZlbDo6
SW5mbywgIltJVFBdIERvbmUgYXBwbHlpbmcgY3Jvc3Mtc2l0ZSB0cmFja2luZyByZXN0cmljdGlv
bnMuIl9zKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpw
cm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMg
OiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgcHJvY2Vzc0Z1bmN0
aW9uKHJlc291cmNlU3RhdGlzdGljLmdldCgpKTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6Omhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgT3BlcmF0aW5nRGF0ZXNX
aW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBpZiAocmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0
aW9uICYmIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlzdGljLCBvcGVyYXRpbmdE
YXRlc1dpbmRvdykpIHsKLSAgICAgICAgaWYgKG9wZXJhdGluZ0RhdGVzV2luZG93ID09IE9wZXJh
dGluZ0RhdGVzV2luZG93OjpMb25nKSB7Ci0gICAgICAgICAgICAvLyBEcm9wIHByaXZhY3kgc2Vu
c2l0aXZlIGRhdGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KLSAgICAgICAgICAgIC8v
IFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93Ci0g
ICAgICAgICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0
IC0xLgotICAgICAgICAgICAgcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUgPSB7IH07Ci0gICAgICAgICAgICByZXNvdXJjZVN0YXRpc3RpYy5zdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMuY2xlYXIoKTsKLSAgICAgICAgICAgIHJlc291cmNlU3Rh
dGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlz
dGljLmhhZFVzZXJJbnRlcmFjdGlvbjsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZUFsbFdlYnNpdGVEYXRhRm9yKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRo
ZXJpbmcpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50
UmVzb3VyY2UgJiYgIWhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihyZXNvdXJj
ZVN0YXRpc3RpYywgT3BlcmF0aW5nRGF0ZXNXaW5kb3c6OkxvbmcpICYmICghc2hvdWxkQ2hlY2tG
b3JHcmFuZGZhdGhlcmluZyB8fCAhcmVzb3VyY2VTdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCk7Ci19
Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRSZW1vdmVB
bGxCdXRDb29raWVzRm9yKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGlj
LCBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcpIGNvbnN0Ci17Ci0gICAgYm9vbCBp
c1JlbW92YWxFbmFibGVkID0gZmlyc3RQYXJ0eVdlYnNpdGVEYXRhUmVtb3ZhbE1vZGUoKSAhPSBG
aXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZSB8fCByZXNvdXJjZVN0YXRpc3Rp
Yy5nb3RMaW5rRGVjb3JhdGlvbkZyb21QcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIGlzUmVz
b3VyY2VHcmFuZGZhdGhlcmVkID0gc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiByZXNv
dXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkOwotICAgIAotICAgIE9wZXJhdGluZ0RhdGVzV2lu
ZG93IHdpbmRvdyB7IH07Ci0gICAgc3dpdGNoIChmaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFs
TW9kZSgpKSB7Ci0gICAgY2FzZSBGaXJzdFBhcnR5V2Vic2l0ZURhdGFSZW1vdmFsTW9kZTo6QWxs
QnV0Q29va2llczoKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBGaXJzdFBhcnR5V2Vi
c2l0ZURhdGFSZW1vdmFsTW9kZTo6Tm9uZToKLSAgICAgICAgd2luZG93ID0gT3BlcmF0aW5nRGF0
ZXNXaW5kb3c6OlNob3J0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJz
aXRlRGF0YVJlbW92YWxNb2RlOjpBbGxCdXRDb29raWVzTGl2ZU9uVGVzdGluZ1RpbWVvdXQ6Ci0g
ICAgICAgIHdpbmRvdyA9IE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpcnN0UGFydHlXZWJzaXRlRGF0YVJlbW92YWxNb2Rl
OjpBbGxCdXRDb29raWVzUmVwcm9UZXN0aW5nVGltZW91dDoKLSAgICAgICAgd2luZG93ID0gT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6OkZvclJlcHJvVGVzdGluZzsKLSAgICB9Ci0KLSAgICByZXR1cm4g
aXNSZW1vdmFsRW5hYmxlZCAmJiAhaXNSZXNvdXJjZUdyYW5kZmF0aGVyZWQgJiYgIWhhc0hhZFVu
ZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihyZXNvdXJjZVN0YXRpc3RpYywgd2luZG93KTsK
LX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZEVuZm9y
Y2VTYW1lU2l0ZVN0cmljdEZvcihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRp
c3RpYywgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nKQotewotICAgIGlmICgoIWlz
U2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudEVuYWJsZWQoKSAmJiAhc2hvdWxkRW5mb3JjZVNhbWVT
aXRlU3RyaWN0Rm9yU3BlY2lmaWNEb21haW4ocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVE
b21haW4pKQotICAgICAgICB8fCAoc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiByZXNv
dXJjZVN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9TaW5jZVNh
bWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQuc2l6ZSgpID4gcGFyYW1ldGVycygpLm1pbmltdW1Ub3BG
cmFtZVJlZGlyZWN0c0ZvclNhbWVTaXRlU3RyaWN0RW5mb3JjZW1lbnQpIHsKLSAgICAgICAgcmVz
b3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJp
Y3RFbmZvcmNlbWVudC5jbGVhcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8V2FsbFRpbWU+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUoY29u
c3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljKQotewotICAgIGlmIChzdGF0aXN0
aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1
ZSgpIDw9IDApCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICByZXR1cm4gc3Rh
dGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOwotfQotCi1SZWdpc3RyYWJsZURv
bWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZvciBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxlRG9tYWluc1RvRGVsZXRlT3JSZXN0cmljdFdlYnNp
dGVEYXRhRm9yKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGJv
b2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1l
c3RhbXAoKSA+IFdhbGxUaW1lOjpub3coKTsKLSAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRo
ZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wKCk7Ci0KLSAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKLSAg
ICAgICAgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7Ci0KLSAgICBhdXRvIG5v
dyA9IFdhbGxUaW1lOjpub3coKTsKLSAgICBhdXRvIG9sZGVzdFVzZXJJbnRlcmFjdGlvbiA9IG5v
dzsKLSAgICBSZWdpc3RyYWJsZURvbWFpbnNUb0RlbGV0ZU9yUmVzdHJpY3RXZWJzaXRlRGF0YUZv
ciB0b0RlbGV0ZU9yUmVzdHJpY3RGb3I7Ci0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICBpZiAoc2hvdWxkRXhlbXB0
RnJvbVdlYnNpdGVEYXRhRGVsZXRpb24oc3RhdGlzdGljLT5yZWdpc3RyYWJsZURvbWFpbikpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGF1dG8gbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUgPSB0aGlzLT5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZShzdGF0aXN0
aWMpKQotICAgICAgICAgICAgb2xkZXN0VXNlckludGVyYWN0aW9uID0gc3RkOjptaW4ob2xkZXN0
VXNlckludGVyYWN0aW9uLCAqbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOwotICAgICAg
ICBpZiAoc2hvdWxkUmVtb3ZlQWxsV2Vic2l0ZURhdGFGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVj
a0ZvckdyYW5kZmF0aGVyaW5nKSkgewotICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9y
LmRvbWFpbnNUb0RlbGV0ZUFsbENvb2tpZXNGb3IuYXBwZW5kKHN0YXRpc3RpYy0+cmVnaXN0cmFi
bGVEb21haW4pOwotICAgICAgICAgICAgdG9EZWxldGVPclJlc3RyaWN0Rm9yLmRvbWFpbnNUb0Rl
bGV0ZUFsbE5vbkNvb2tpZVdlYnNpdGVEYXRhRm9yLmFwcGVuZChzdGF0aXN0aWMtPnJlZ2lzdHJh
YmxlRG9tYWluKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRSZW1v
dmVBbGxCdXRDb29raWVzRm9yKHN0YXRpc3RpYywgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZykpIHsKLSAgICAgICAgICAgICAgICB0b0RlbGV0ZU9yUmVzdHJpY3RGb3IuZG9tYWluc1RvRGVs
ZXRlQWxsTm9uQ29va2llV2Vic2l0ZURhdGFGb3IuYXBwZW5kKHN0YXRpc3RpYy0+cmVnaXN0cmFi
bGVEb21haW4pOwotICAgICAgICAgICAgICAgIHN0YXRpc3RpYy0+Z290TGlua0RlY29yYXRpb25G
cm9tUHJldmFsZW50UmVzb3VyY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChzaG91bGRFbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3Ioc3RhdGlzdGljLCBzaG91bGRDaGVj
a0ZvckdyYW5kZmF0aGVyaW5nKSkgewotICAgICAgICAgICAgICAgIHRvRGVsZXRlT3JSZXN0cmlj
dEZvci5kb21haW5zVG9FbmZvcmNlU2FtZVNpdGVTdHJpY3RGb3IuYXBwZW5kKHN0YXRpc3RpYy0+
cmVnaXN0cmFibGVEb21haW4pOwotCi0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKGRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhJVFBEZWJ1ZywgIlNjaGVkdWxlZCAlIiBQVUJMSUNfTE9HX1NUUklORyAiIHRvIGhhdmUgaXRz
IGNvb2tpZXMgc2V0IHRvIFNhbWVTaXRlPXN0cmljdC4iLCBzdGF0aXN0aWMtPnJlZ2lzdHJhYmxl
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICBkZWJ1
Z0Jyb2FkY2FzdENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OklUUERlYnVnLCBNZXNzYWdl
TGV2ZWw6OkluZm8sIG1ha2VTdHJpbmcoIlNjaGVkdWxlZCAnIiwgc3RhdGlzdGljLT5yZWdpc3Ry
YWJsZURvbWFpbi5zdHJpbmcoKSwgIicgdG8gaGF2ZSBpdHMgY29va2llcyBzZXQgdG8gU2FtZVNp
dGU9c3RyaWN0Jy4iKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgJiYgc3RhdGlzdGlj
LT5ncmFuZGZhdGhlcmVkKQotICAgICAgICAgICAgc3RhdGlzdGljLT5ncmFuZGZhdGhlcmVkID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR2l2ZSB0aGUgdXNlciBlbm91Z2ggdGltZSB0byBpbnRl
cmFjdCB3aXRoIHdlYnNpdGVzIHVudGlsIHdlIHJlbW92ZSBub24tY29va2llIHdlYnNpdGUgZGF0
YS4KLSAgICBpZiAoIXBhcmFtZXRlcnMoKS5pc1J1bm5pbmdUZXN0ICYmIG5vdyAtIG9sZGVzdFVz
ZXJJbnRlcmFjdGlvbiA8IHBhcmFtZXRlcnMoKS5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpCi0gICAgICAgIHRvRGVsZXRlT3JSZXN0cmljdEZvci5kb21haW5zVG9EZWxldGVB
bGxOb25Db29raWVXZWJzaXRlRGF0YUZvci5jbGVhcigpOwotCi0gICAgcmV0dXJuIHRvRGVsZXRl
T3JSZXN0cmljdEZvcjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLQotICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPD0gcGFy
YW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4
U3RhdGlzdGljc0VudHJpZXMpOwotCi0gICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1By
dW5lID0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIC0gcGFyYW1ldGVycygpLnBydW5l
RW50cmllc0Rvd25UbzsKLSAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwot
Ci0gICAgVmVjdG9yPFN0YXRpc3RpY3NMYXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9y
dGFuY2VbbWF4SW1wb3J0YW5jZSArIDFdOwotICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0
aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKLSAgICAgICAgcmVzb3VyY2Vz
VG9QcnVuZVBlckltcG9ydGFuY2VbY29tcHV0ZUltcG9ydGFuY2UocmVzb3VyY2VTdGF0aXN0aWMp
XS5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3RpYy0+cmVnaXN0cmFibGVEb21haW4sIHJlc291cmNl
U3RhdGlzdGljLT5sYXN0U2VlbiB9KTsKLQotICAgIGZvciAodW5zaWduZWQgaW1wb3J0YW5jZSA9
IDA7IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lICYmIGltcG9ydGFuY2UgPD0gbWF4SW1wb3J0
YW5jZTsgKytpbXBvcnRhbmNlKQotICAgICAgICBwcnVuZVJlc291cmNlcyhtX3Jlc291cmNlU3Rh
dGlzdGljc01hcCwgcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbaW1wb3J0YW5jZV0sIG51
bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKLQotICAgIEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVz
TGVmdFRvUHJ1bmUpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byYg
c3RhdGlzdGljcyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgc3RhdGlzdGljcy5sYXN0U2VlbiA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vj
b25kcyhzZWNvbmRzLnNlY29uZHMoKSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpyZW1vdmVEYXRhRm9yRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBkb21haW4pCi17Ci0gICAgbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAucmVtb3ZlKGRvbWFpbik7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC52YWx1ZXMoKSkgewotICAgICAgICBzdGF0aXN0aWMtPnRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8ucmVtb3ZlKGRvbWFpbik7Ci0gICAgICAgIHN0YXRpc3RpYy0+dG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb1NpbmNlU2FtZVNpdGVTdHJpY3RFbmZvcmNlbWVudC5yZW1vdmUoZG9tYWluKTsKLSAg
ICAgICAgc3RhdGlzdGljLT50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucmVtb3ZlKGRvbWFp
bik7Ci0gICAgICAgIHN0YXRpc3RpYy0+dG9wRnJhbWVMaW5rRGVjb3JhdGlvbnNGcm9tLnJlbW92
ZShkb21haW4pOwotICAgICAgICBzdGF0aXN0aWMtPnRvcEZyYW1lTG9hZGVkVGhpcmRQYXJ0eVNj
cmlwdHMucmVtb3ZlKGRvbWFpbik7Ci0gICAgICAgIHN0YXRpc3RpYy0+c3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucy5yZW1vdmUoZG9tYWluKTsKLSAgICAgICAgc3RhdGlzdGljLT5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLnJlbW92ZShkb21haW4pOwotICAgICAgICBzdGF0aXN0
aWMtPnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8ucmVtb3ZlKGRvbWFpbik7Ci0gICAgICAg
IHN0YXRpc3RpYy0+c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLnJlbW92ZShkb21haW4p
OwotICAgIH0KLX0KLQotVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmFsbERvbWFpbnMoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgcmV0dXJuIGNvcHlUb1ZlY3RvcihtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5rZXlzKCkpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChzaG91
bGRTa2lwKGRvbWFpbikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBhdXRvJiByZXNvdXJj
ZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJl
c291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBpZiAoc2hvdWxkU2tpcChkb21haW4pKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
YXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOwotICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNl
U3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Ci19Ci0KLVZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1lcmdl
T3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0RhdGVz
LCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKLXsKLSAgICBpZiAoZXhpc3RpbmdE
YXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKLQotICAg
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSAr
IG5ld0RhdGVzLnNpemUoKSk7Ci0KLSAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3Jz
IG9mIGRhdGVzLgotICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGlu
Z0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0
ZXMuYmVnaW4oKSk7Ci0gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KLSAgICByZW1vdmVS
ZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKLQotICAgIC8vIERyb3Agb2xkIGRhdGVzIHVu
dGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZy4KLSAg
ICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nKQot
ICAgICAgICBtZXJnZWREYXRlcy5yZW1vdmUoMCk7Ci0KLSAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZU9wZXJh
dGluZ0RhdGVzKFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9vcGVyYXRpbmdEYXRlcyA9IG1lcmdlT3Bl
cmF0aW5nRGF0ZXMobV9vcGVyYXRpbmdEYXRlcywgV1RGTW92ZShuZXdEYXRlcykpOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgYXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6OnRvZGF5KCk7Ci0gICAgaWYgKCFt
X29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8PSBtX29wZXJhdGluZ0RhdGVzLmxh
c3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6
ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93TG9uZykKLSAgICAgICAgbV9vcGVyYXRpbmdEYXRl
cy5yZW1vdmUoMCk7Ci0KLSAgICBtX29wZXJhdGluZ0RhdGVzLmFwcGVuZCh0b2RheSk7Ci19Ci0K
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhw
aXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgT3BlcmF0aW5nRGF0
ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvd0luRGF5
cyA9IDA7Ci0gICAgc3dpdGNoIChvcGVyYXRpbmdEYXRlc1dpbmRvdykgewotICAgIGNhc2UgT3Bl
cmF0aW5nRGF0ZXNXaW5kb3c6Okxvbmc6Ci0gICAgICAgIG9wZXJhdGluZ0RhdGVzV2luZG93SW5E
YXlzID0gb3BlcmF0aW5nRGF0ZXNXaW5kb3dMb25nOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE9wZXJhdGluZ0RhdGVzV2luZG93OjpTaG9ydDoKLSAgICAgICAgb3BlcmF0aW5nRGF0ZXNXaW5k
b3dJbkRheXMgPSBvcGVyYXRpbmdEYXRlc1dpbmRvd1Nob3J0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIE9wZXJhdGluZ0RhdGVzV2luZG93OjpGb3JMaXZlT25UZXN0aW5nOgotICAgICAgICBy
ZXR1cm4gV2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBv
cGVyYXRpbmdUaW1lV2luZG93Rm9yTGl2ZU9uVGVzdGluZzsKLSAgICBjYXNlIE9wZXJhdGluZ0Rh
dGVzV2luZG93OjpGb3JSZXByb1Rlc3Rpbmc6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRv
d0luRGF5cykgewotICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5nRGF0ZXMuZmlyc3QoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIElmIHdlIGRvbid0IG1lZXQg
dGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBjaGVjayB0aGUgdXNl
ciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBmb3IgdGVzdGluZyku
Ci0gICAgaWYgKHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKSB7
Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIHRoaXMtPnBhcmFtZXRlcnMoKS50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVl
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdGF0aXN0
aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3Rp
YywgT3BlcmF0aW5nRGF0ZXNXaW5kb3cgb3BlcmF0aW5nRGF0ZXNXaW5kb3cpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lLCBvcGVyYXRpbmdEYXRlc1dpbmRvdyk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbnNlcnRFeHBpcmVkU3RhdGlzdGlj
Rm9yVGVzdGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCB1bnNpZ25lZCBudW1i
ZXJPZk9wZXJhdGluZ0RheXNQYXNzZWQsIGJvb2wgaGFzVXNlckludGVyYWN0aW9uLCBib29sIGlz
U2NoZWR1bGVkRm9yQWxsQnV0Q29va2llRGF0YVJlbW92YWwsIGJvb2wgaXNQcmV2YWxlbnQpCi17
Ci0gICAgLy8gUG9wdWxhdGUgdGhlIE9wZXJhdGluZyBEYXRlcyB0YWJsZSB3aXRoIGVub3VnaCBk
YXlzIHRvIHJlcXVpcmUgcHJ1bmluZy4KLSAgICBkb3VibGUgZGF5c0Fnb0luU2Vjb25kcyA9IDA7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1iZXJPZk9wZXJhdGluZ0RheXNQYXNz
ZWQ7IGkrKykgewotICAgICAgICBkb3VibGUgZGF5c1RvU3VidHJhY3QgPSBTZWNvbmRzOjpmcm9t
SG91cnMoMjQgKiBpKS52YWx1ZSgpOwotICAgICAgICBkYXlzQWdvSW5TZWNvbmRzID0gV2FsbFRp
bWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSAtIGRheXNUb1N1YnRyYWN0Owot
ICAgICAgICBhdXRvIGRhdGVUb0luc2VydCA9IE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShX
YWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZGF5c0Fnb0luU2Vjb25kcykpOwotICAgICAgICBtX29w
ZXJhdGluZ0RhdGVzLmFwcGVuZChPcGVyYXRpbmdEYXRlKGRhdGVUb0luc2VydC55ZWFyKCksIGRh
dGVUb0luc2VydC5tb250aCgpLCBkYXRlVG9JbnNlcnQubW9udGhEYXkoKSkpOwotICAgIH0KLQot
ICAgIC8vIE1ha2Ugc3VyZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBpcyB0aGUgbGVh
c3QgcmVjZW50IG9mIGFsbCBlbnRyaWVzLgotICAgIGRheXNBZ29JblNlY29uZHMgLT0gU2Vjb25k
czo6ZnJvbUhvdXJzKDI0KS52YWx1ZSgpOwotCi0gICAgYXV0byBzdGF0aXN0aWMgPSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzKGRvbWFpbik7Ci0gICAgc3RhdGlzdGljLmxhc3RTZWVuID0gV2FsbFRp
bWU6OmZyb21SYXdTZWNvbmRzKGRheXNBZ29JblNlY29uZHMpOwotICAgIHN0YXRpc3RpYy5oYWRV
c2VySW50ZXJhY3Rpb24gPSBoYXNVc2VySW50ZXJhY3Rpb247Ci0gICAgc3RhdGlzdGljLm1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGRheXNB
Z29JblNlY29uZHMpOwotICAgIHN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID0gaXNQcmV2
YWxlbnQ7Ci0gICAgc3RhdGlzdGljLmdvdExpbmtEZWNvcmF0aW9uRnJvbVByZXZhbGVudFJlc291
cmNlID0gaXNTY2hlZHVsZWRGb3JBbGxCdXRDb29raWVEYXRhUmVtb3ZhbDsKLQotICAgIG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmVuc3VyZShzdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4sIFsm
c3RhdGlzdGljXSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFJlc291cmNlTG9hZFN0
YXRpc3RpY3M+KFdURk1vdmUoc3RhdGlzdGljKSk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKaW5kZXggZmM3NGJjYzBlYzFhMmNjYzI5ZjVkMmQzZDI0ODhjY2JlNTdm
YzAyZC4uMjQ5ZDVjNzc1MDg4ODdjNTAyODVkOWQ3OTdmYjRhNTU4ZTEwYTBmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTM1LDcgKzM1
LDYgQEAKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIlByaXZhdGVDbGlj
a01lYXN1cmVtZW50TWFuYWdlci5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCiAjaW5jbHVk
ZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKQEAg
LTE2Niw5ICsxNjUsNiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYgbgogICAgICAgICBwb3N0VGFz
ayhbdGhpcywgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkuaXNvbGF0ZWRDb3B5KCksIHNob3VsZEluY2x1ZGVMb2NhbGhvc3Qs
IHNlc3Npb25JRCA9IG5ldHdvcmtTZXNzaW9uLnNlc3Npb25JRCgpXSB7CiAgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZSA9IG1ha2VVbmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSwgc2hvdWxkSW5jbHVkZUxvY2FsaG9z
dCwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgc2Vzc2lvbklEKTsKIAotICAgICAg
ICAgICAgYXV0byBtZW1vcnlTdG9yZSA9IG1ha2VVbmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlPigqdGhpcywgbV9zdGF0aXN0aWNzUXVldWUsIHNob3VsZEluY2x1ZGVMb2Nh
bGhvc3QpOwotICAgICAgICAgICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZS5nZXQoKSkucG9wdWxhdGVGcm9tTWVtb3J5U3Rv
cmUoKm1lbW9yeVN0b3JlKTsKLQogICAgICAgICAgICAgYXV0byBsZWdhY3lQbGlzdEZpbGVQYXRo
ID0gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHJlc291cmNlTG9hZFN0YXRp
c3RpY3NEaXJlY3RvcnksICJmdWxsX2Jyb3dzaW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3Qi
KTsKICAgICAgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGxlZ2FjeVBsaXN0Rmls
ZVBhdGgpKQogICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobGVnYWN5UGxp
c3RGaWxlUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA0MjY2NWI1MDRmZGZmZDA1ZGY1Y2RjY2Q0N2Yz
NWRjMjY2NzRiZTA2Li45M2RiYTZjZDk2MGIwODkxYjJiZGY0OWZlNWZlMDA1NzU4NGJhNDYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKQEAgLTgzLDcgKzgzLDYgQEAgTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3Bw
CiBOZXR3b3JrUHJvY2Vzcy9QcmVjb25uZWN0VGFzay5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKLU5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAog
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3Bw
CiAKIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDcwODFiODQz
ZjdlYzA1Mjk2NjJlZmYzMzg4NzFjNzA2YzU4YWE5NmIuLjE5MWY3NmIzODk0ZTkxN2M1MjdjNGY5
MzhmZWVkODYzYzc3MDFjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTM0OCw3ICsxMzQ4LDYgQEAKIAkJN0FCNkVBNDcxRUVBQjZC
ODAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAvKiBB
UElHZW9sb2NhdGlvblByb3ZpZGVyLmggKi87IH07CiAJCTdBRjIzNjIxMUU3OUE0MDgwMDQzOEEw
NSAvKiBXZWJFcnJvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBRjIzNjFGMUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLzsgfTsKIAkJ
N0FGQkQzNjMyMUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGQkQz
NjIyMUU1MEYzOTAwNURCQUNCIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICov
OyB9OwotCQk3QUZCRDM2NzIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlLmggKi87IH07CiAJCTdBRkJEMzZGMjFFNTQ2RjgwMDVEQkFDQiAvKiBQZXJzaXN0
ZW5jeVV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUZCRDM2RDIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5oICovOyB9Owog
CQk3QjFEQjI2NjI1NjY4Q0UxMDAwRTI2QkMgLyogQXJyYXlSZWZlcmVuY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMURCMjY1MjU2NjhDRTAwMDBF
MjZCQyAvKiBBcnJheVJlZmVyZW5jZS5oICovOyB9OwogCQk3QjQ4M0YxRjI1Q0REQTlDMDAxMjA0
ODYgLyogTWVzc2FnZVJlY2VpdmVRdWV1ZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0I0ODNGMUIyNUNEREE5QjAwMTIwNDg2IC8qIE1lc3NhZ2VS
ZWNlaXZlUXVldWVNYXAuaCAqLzsgfTsKQEAgLTQ2OTQsOCArNDY5Myw2IEBACiAJCTdBRjIzNjFG
MUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIz
NjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3QUZCRDM2MjIxRTUwRjM5MDA1REJBQ0IgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
N0FGQkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGQkQz
NkQyMUU1NDZFMzAwNURCQUNCIC8qIFBlcnNpc3RlbmN5VXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGVyc2lzdGVuY3lVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZCRDM2
RTIxRTU0NkUzMDA1REJBQ0IgLyogUGVyc2lzdGVuY3lVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQZXJzaXN0ZW5jeVV0aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0IxREIyNjUyNTY2OENFMDAwMEUyNkJDIC8qIEFycmF5UmVmZXJlbmNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5UmVmZXJlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05NDgyLDggKzk0NzksNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJN0Ew
RDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcCAqLywKIAkJCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywKLQkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLywKLQkJCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8sCiAJCQkJN0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgKi8sCiAJCQkJN0FDRTgyRTcyMjFDQUUwNjAwMERBOTRDIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAogCQkJCTdBNDFFOUZBMjFGODFEQUMwMEI4OENE
QiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCAqLywKQEAgLTEyNTA3LDcgKzEyNTAy
LDYgQEAKIAkJCQk1Q0I3QUZFNzIzQzY4MjA3MDBFNDlDRjMgLyogUmVzb3VyY2VMb2FkSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNkJFOTY5Q0QxRTU0RTA1NDAwOEI3NDgzIC8qIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2QkU5NjlDQjFF
NTRENENGMDA4Qjc0ODMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJN0FGQkQzNjcyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzMDA2NkUx
MTEwRjRGNzAwMzE5MzdDIC8qIFJlc3BvbnNpdmVuZXNzVGltZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTQxMDQ4MkNFMURERDMyNEYwMEYwMDZEMCAvKiBSVENOZXR3b3JrLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0NkYzOEU4QzI0MTZFNjczMDA1OTM3NUEgLyogUnVubmluZ0JvYXJkU2VydmljZXNT
UEkuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDRlZjQ3ZDY5MGNjM2Y0OTBmOGVjZDAxNzY5ODBmOTZiZTAxY2E3M2Eu
LjE3NWJiZjY1OGJmMDUyNzkxNGIzOTdjMmZmN2RjNzliNGY4ZjBjNDYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAy
MS0wOS0xNyAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAg
ICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgSVRQIG1lbW9yeSBzdG9yZSBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjk1MTIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzgyNjQ0MzA5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIERlbGV0ZWQgYW4g
ZXh0cmEgbWVtb3J5IHN0b3JlIHRlc3QgbGVmdG92ZXIgZnJvbSB3aGVuIHdlIHN0aWxsIGhhZAor
ICAgICAgICBhIGZ1bmN0aW9uaW5nIG1lbW9yeSBzdG9yZS4gTm93IGl0IGlzIGp1c3QgYSBkdXBs
aWNhdGUgb2YgdGhlIGRhdGFiYXNlCisgICAgICAgIHRlc3QsIHNvIHdlIGNhbiByZW1vdmUgaXQu
CisKIDIwMjEtMDktMTcgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTihyMjc1MjY3KSBbR0xJQl0gQVBJIHRlc3QgL3dlYmtpdC9XZWJLaXRXZWJz
aXRlRGF0YS9jb25maWd1cmF0aW9uIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cy5tbQppbmRleCAwN2E0NjViZjAzNjhmZDRiM2I1ODQyODA3YTI5MWE4ZjYxYjQ3YTA5Li4xZWU3
YmZiMjcyODZmMGJiMmEwMGRhYWI2MzM2ODFlZTU4ZTdhMzU4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLm1tCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyB2b2lkIGVuc3VyZUlUUEZpbGVJ
c0NyZWF0ZWQoKQogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkOk5PXTsKIH0KIAotVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNh
bGxiYWNrRGF0YWJhc2UpCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIEdyYW5kZmF0aGVy
Q2FsbGJhY2spCiB7CiAgICAgYXV0byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBk
ZWZhdWx0RGF0YVN0b3JlXTsKIApAQCAtMTM2LDcgKzEzNiw3IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFja0RhdGFiYXNlKQogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwogfQogCi1URVNUKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25TdGFydHVwRGF0YWJhc2UpCitURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25TdGFydHVwKQogewogICAgIGF1
dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERhdGFTdG9yZV07CiAK
QEAgLTE1Nyw3ICsxNTcsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5v
dEdyYW5kZmF0aGVyT25TdGFydHVwRGF0YWJhc2UpCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZjYWxsYmFja0ZsYWcpOwogfQogCi1URVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENo
aWxkUHJvY2Vzc2VzTm90TGF1bmNoZWREYXRhYmFzZSkKK1RFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgQ2hpbGRQcm9jZXNzZXNOb3RMYXVuY2hlZCkKIHsKICAgICAvLyBFbnN1cmUgdGhlIHNo
YXJlZCBwcm9jZXNzIHBvb2wgZXhpc3RzIHNvIHRoZSBkYXRhIHN0b3JlIG9wZXJhdGlvbnMgd2Un
cmUgYWJvdXQgdG8gZG8gd29yayB3aXRoIGl0LgogICAgIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFBy
b2Nlc3NQb29sID0gW1dLUHJvY2Vzc1Bvb2wgX3NoYXJlZFByb2Nlc3NQb29sXTsKQEAgLTY3OCwy
MDkgKzY3OCw2IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFTdW1tYXJ5KQogCiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKIAotICAgIF9fYmxvY2sgYm9vbCBkb25lRmxhZyA9IGZh
bHNlOwotICAgIFtkYXRhU3RvcmUgX2NsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljczpeKHZvaWQp
IHsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwotICAgIH1dOwotCi0gICAgc3RhdGljIGJvb2wg
c3RhdGlzdGljc1VwZGF0ZWQgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3Ry
aW5nICptZXNzYWdlKSB7Ci0gICAgICAgIGlmICghW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAi
U3RhdGlzdGljcyBVcGRhdGVkIl0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRp
c3RpY3NVcGRhdGVkID0gdHJ1ZTsKLSAgICB9XTsKLQotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6
OnJ1bigmZG9uZUZsYWcpOwotICAgIAotICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0gICAgW2RhdGFT
dG9yZSBfc2V0VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nTW9kZTp0cnVlIG9ubHlPblNpdGVzV2l0
aG91dFVzZXJJbnRlcmFjdGlvbjpmYWxzZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7Ci0g
ICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLQotICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmZG9uZUZsYWcpOwotCi0gICAgLy8gU2V0IHR3byB0aGlyZCBwYXJ0aWVzIHRvIGJl
IHByZXZhbGVudCwgbGVhdmUgZXZpbDEuY29tIGFzIG5vbi1wcmV2YWxlbnQgdG8gZW5zdXJlCi0g
ICAgLy8gdGhpcyBjYWxsIHJldHVybnMgYWxsIHRoaXJkIHBhcnRpZXMuCi0gICAgZG9uZUZsYWcg
PSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9zZXRQcmV2YWxlbnREb21haW46W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJodHRwOi8vZXZpbDIuY29tIl0gY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkg
ewotICAgICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgZG9uZUZsYWcgPSBmYWxz
ZTsKLSAgICBbZGF0YVN0b3JlIF9zZXRQcmV2YWxlbnREb21haW46W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJodHRwOi8vZXZpbDMuY29tIl0gY29tcGxldGlvbkhhbmRsZXI6IF4odm9pZCkgewotICAg
ICAgICBkb25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0KLSAgICAvLyBTZWVkIHRlc3QgZGF0YSBp
biB0aGUgd2ViIHByb2Nlc3MnIG9ic2VydmVyLgotCi0gICAgLy8gZXZpbDEKLSAgICBkb25lRmxh
ZyA9IGZhbHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRp
c3RpY3NGb3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vd2Via2l0Lm9yZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
ZXZpbDEuY29tIl0gc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246Tk8gY29tcGxldGlvbkhhbmRs
ZXI6IF4oKSB7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLQotICAgIGRvbmVGbGFnID0gZmFsc2U7Ci0g
ICAgW3NoYXJlZFByb2Nlc3NQb29sIF9zZWVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZvclRlc3Rp
bmdXaXRoRmlyc3RQYXJ0eTpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQyLm9y
ZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDEuY29tIl0g
c2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246Tk8gY29tcGxldGlvbkhhbmRsZXI6IF4oKSB7Ci0g
ICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmVGbGFnKTsKLQotCi0gICAgLy8gZXZpbDIKLSAgICBkb25lRmxhZyA9IGZhbHNl
OwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JU
ZXN0aW5nV2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0
Lm9yZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDIuY29t
Il0gc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246Tk8gY29tcGxldGlvbkhhbmRsZXI6IF4oKSB7
Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmVGbGFnKTsKLQotCi0gICAgLy8gZXZpbDMKLSAgICBkb25lRmxhZyA9IGZh
bHNlOwotICAgIFtzaGFyZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NG
b3JUZXN0aW5nV2l0aEZpcnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Vi
a2l0Lm9yZyJdIHRoaXJkUGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZXZpbDMu
Y29tIl0gc2hvdWxkU2NoZWR1bGVOb3RpZmljYXRpb246Tk8gY29tcGxldGlvbkhhbmRsZXI6IF4o
KSB7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtzaGFy
ZWRQcm9jZXNzUG9vbCBfc2VlZFJlc291cmNlTG9hZFN0YXRpc3RpY3NGb3JUZXN0aW5nV2l0aEZp
cnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Mi5vcmciXSB0aGly
ZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwzLmNvbSJdIHNob3VsZFNj
aGVkdWxlTm90aWZpY2F0aW9uOk5PIGNvbXBsZXRpb25IYW5kbGVyOiBeKCkgewotICAgICAgICBk
b25lRmxhZyA9IHRydWU7Ci0gICAgfV07Ci0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lRmxhZyk7Ci0gICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbc2hhcmVkUHJvY2Vzc1Bvb2wg
X3NlZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRm9yVGVzdGluZ1dpdGhGaXJzdFBhcnR5OltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDMub3JnIl0gdGhpcmRQYXJ0eTpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImh0dHA6Ly9ldmlsMy5jb20iXSBzaG91bGRTY2hlZHVsZU5vdGlmaWNh
dGlvbjpOTyBjb21wbGV0aW9uSGFuZGxlcjogXigpIHsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVl
OwotICAgIH1dOwotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotCi0g
ICAgc3RhdGlzdGljc1VwZGF0ZWQgPSBmYWxzZTsKLSAgICBbd2ViVmlldzEgbG9hZEhUTUxTdHJp
bmc6QCI8Ym9keT48c2NyaXB0PmNsb3NlKCk7PC9zY3JpcHQ+PC9ib2R5PiIgYmFzZVVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImh0dHA6Ly93ZWJraXQub3JnIl1dOwotICAgIFt3ZWJWaWV3MiBs
b2FkSFRNTFN0cmluZzpAIjxib2R5PjxzY3JpcHQ+Y2xvc2UoKTs8L3NjcmlwdD48L2JvZHk+IiBi
YXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDIub3JnIl1dOwotICAg
IFt3ZWJWaWV3MyBsb2FkSFRNTFN0cmluZzpAIjxib2R5PjxzY3JpcHQ+Y2xvc2UoKTs8L3Njcmlw
dD48L2JvZHk+IiBiYXNlVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDMu
b3JnIl1dOwotCi0gICAgLy8gV2FpdCBmb3IgdGhlIHN0YXRpc3RpY3MgdG8gYmUgdXBkYXRlZCBp
biB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmc3Rh
dGlzdGljc1VwZGF0ZWQpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGhpcmQtcGFydHkgZXZp
bDEgaXMgbm93IHJlZ2lzdGVyZWQgYXMgc3VicmVzb3VyY2UuCi0gICAgZG9uZUZsYWcgPSBmYWxz
ZTsKLSAgICBbZGF0YVN0b3JlIF9pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXJGaXJzdFBh
cnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB0aGlyZFBhcnR5
OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwxLmNvbSJdIGNvbXBsZXRpb25IYW5k
bGVyOiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlzUmVnaXN0
ZXJlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9IGZhbHNlOwotICAgIFtk
YXRhU3RvcmUgX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZpcnN0UGFydHk6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Mi5vcmciXSB0aGlyZFBhcnR5OltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwxLmNvbSJdIGNvbXBsZXRpb25IYW5kbGVyOiBeKEJP
T0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlzUmVnaXN0ZXJlZCk7Ci0g
ICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmVGbGFnKTsKLQotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgdGhpcmQtcGFydHkg
ZXZpbDIgaXMgbm93IHJlZ2lzdGVyZWQgYXMgc3VicmVzb3VyY2UuCi0gICAgZG9uZUZsYWcgPSBm
YWxzZTsKLSAgICBbZGF0YVN0b3JlIF9pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXJGaXJz
dFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5vcmciXSB0aGlyZFBh
cnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwyLmNvbSJdIGNvbXBsZXRpb25I
YW5kbGVyOiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlzUmVn
aXN0ZXJlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLQotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUg
dGhpcmQtcGFydHkgZXZpbDMgaXMgbm93IHJlZ2lzdGVyZWQgYXMgc3VicmVzb3VyY2UuCi0gICAg
ZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9pc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXJGaXJzdFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdC5v
cmciXSB0aGlyZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwzLmNvbSJd
IGNvbXBsZXRpb25IYW5kbGVyOiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKGlzUmVnaXN0ZXJlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsK
LSAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9
IGZhbHNlOwotICAgIFtkYXRhU3RvcmUgX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZp
cnN0UGFydHk6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Mi5vcmciXSB0aGly
ZFBhcnR5OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwzLmNvbSJdIGNvbXBsZXRp
b25IYW5kbGVyOiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlz
UmVnaXN0ZXJlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLSAgICBkb25lRmxhZyA9IGZhbHNlOwot
ICAgIFtkYXRhU3RvcmUgX2lzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlckZpcnN0UGFydHk6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0My5vcmciXSB0aGlyZFBhcnR5OltO
U1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2V2aWwzLmNvbSJdIGNvbXBsZXRpb25IYW5kbGVy
OiBeKEJPT0wgaXNSZWdpc3RlcmVkKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGlzUmVnaXN0ZXJl
ZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLSAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKLQotCi0gICAgLy8gQ29sbGVjdCB0aGUgSVRQIGRhdGEg
c3VtbWFyeSB3aGljaCBzaG91bGQgaW5jbHVkZSBhbGwgdGhpcmQgcGFydGllcyBpbiB0aGUKLSAg
ICAvLyBvcmRlcjogW2V2aWwzLmNvbSwgZXZpbDEuY29tLCBldmlsMi5jb21dIHNvcnRlZCBieSBu
dW1iZXIgb2YgZmlyc3QgcGFydGllcwotICAgIC8vIGl0IGFwcGVhcnMgdW5kZXIgb3IgcmVkaXJl
Y3RzIHRvCi0gICAgZG9uZUZsYWcgPSBmYWxzZTsKLSAgICBbZGF0YVN0b3JlIF9nZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YVN1bW1hcnk6XnZvaWQoTlNBcnJheTxfV0tSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzVGhpcmRQYXJ0eSAqPiAqdGhpcmRQYXJ0eURhdGEpCi0gICAgewotICAgICAgICBF
WFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PihbdGhpcmRQYXJ0eURhdGEgY291bnRdKSwgMyk7Ci0g
ICAgICAgIE5TRW51bWVyYXRvciAqdGhpcmRQYXJ0eURvbWFpbnMgPSBbdGhpcmRQYXJ0eURhdGEg
b2JqZWN0RW51bWVyYXRvcl07Ci0KLSAgICAgICAgLy8gZXZpbDMKLSAgICAgICAgX1dLUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RoaXJkUGFydHkgKmV2aWwzVGhpcmRQYXJ0eSA9IFt0aGlyZFBhcnR5
RG9tYWlucyBuZXh0T2JqZWN0XTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV2aWwzVGhpcmRQ
YXJ0eS50aGlyZFBhcnR5RG9tYWluLCBAImV2aWwzLmNvbSIpOwotCi0gICAgICAgIE5TRW51bWVy
YXRvciAqZXZpbDNFbnVtZXJhdG9yID0gW2V2aWwzVGhpcmRQYXJ0eS51bmRlckZpcnN0UGFydGll
cyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICAgICAgX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Zp
cnN0UGFydHkgKmV2aWwzRmlyc3RQYXJ0eTEgPSBbZXZpbDNFbnVtZXJhdG9yIG5leHRPYmplY3Rd
OwotICAgICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqZXZpbDNGaXJz
dFBhcnR5MiA9IFtldmlsM0VudW1lcmF0b3IgbmV4dE9iamVjdF07Ci0gICAgICAgIF9XS1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NGaXJzdFBhcnR5ICpldmlsM0ZpcnN0UGFydHkzID0gW2V2aWwzRW51
bWVyYXRvciBuZXh0T2JqZWN0XTsKLQotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXZpbDNGaXJz
dFBhcnR5MS5maXJzdFBhcnR5RG9tYWluLCBAIndlYmtpdDIub3JnIik7Ci0gICAgICAgIEVYUEVD
VF9XS19TVFJFUShldmlsM0ZpcnN0UGFydHkyLmZpcnN0UGFydHlEb21haW4sIEAid2Via2l0My5v
cmciKTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV2aWwzRmlyc3RQYXJ0eTMuZmlyc3RQYXJ0
eURvbWFpbiwgQCJ3ZWJraXQub3JnIik7Ci0KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGV2aWwzRmly
c3RQYXJ0eTEudGhpcmRQYXJ0eVN0b3JhZ2VBY2Nlc3NHcmFudGVkKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKGV2aWwzRmlyc3RQYXJ0eTIudGhpcmRQYXJ0eVN0b3JhZ2VBY2Nlc3NHcmFudGVkKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKGV2aWwzRmlyc3RQYXJ0eTMudGhpcmRQYXJ0eVN0b3JhZ2VB
Y2Nlc3NHcmFudGVkKTsKLQotICAgICAgICAvLyBldmlsMQotICAgICAgICBfV0tSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGhpcmRQYXJ0eSAqZXZpbDFUaGlyZFBhcnR5ID0gW3RoaXJkUGFydHlEb21h
aW5zIG5leHRPYmplY3RdOwotICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoZXZpbDFUaGlyZFBhcnR5
LnRoaXJkUGFydHlEb21haW4sIEAiZXZpbDEuY29tIik7Ci0KLSAgICAgICAgTlNFbnVtZXJhdG9y
ICpldmlsMUVudW1lcmF0b3IgPSBbZXZpbDFUaGlyZFBhcnR5LnVuZGVyRmlyc3RQYXJ0aWVzIG9i
amVjdEVudW1lcmF0b3JdOwotICAgICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQ
YXJ0eSAqZXZpbDFGaXJzdFBhcnR5MT0gW2V2aWwxRW51bWVyYXRvciBuZXh0T2JqZWN0XTsKLSAg
ICAgICAgX1dLUmVzb3VyY2VMb2FkU3RhdGlzdGljc0ZpcnN0UGFydHkgKmV2aWwxRmlyc3RQYXJ0
eTIgPSBbZXZpbDFFbnVtZXJhdG9yIG5leHRPYmplY3RdOwotCi0gICAgICAgIEVYUEVDVF9XS19T
VFJFUShldmlsMUZpcnN0UGFydHkxLmZpcnN0UGFydHlEb21haW4sIEAid2Via2l0Mi5vcmciKTsK
LSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV2aWwxRmlyc3RQYXJ0eTIuZmlyc3RQYXJ0eURvbWFp
biwgQCJ3ZWJraXQub3JnIik7Ci0KLSAgICAgICAgRVhQRUNUX0ZBTFNFKGV2aWwxRmlyc3RQYXJ0
eTEudGhpcmRQYXJ0eVN0b3JhZ2VBY2Nlc3NHcmFudGVkKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KGV2aWwxRmlyc3RQYXJ0eTIudGhpcmRQYXJ0eVN0b3JhZ2VBY2Nlc3NHcmFudGVkKTsKLQotICAg
ICAgICAvLyBldmlsMgotICAgICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGhpcmRQYXJ0
eSAqZXZpbDJUaGlyZFBhcnR5ID0gW3RoaXJkUGFydHlEb21haW5zIG5leHRPYmplY3RdOwotICAg
ICAgICBFWFBFQ1RfV0tfU1RSRVEoZXZpbDJUaGlyZFBhcnR5LnRoaXJkUGFydHlEb21haW4sIEAi
ZXZpbDIuY29tIik7Ci0KLSAgICAgICAgTlNFbnVtZXJhdG9yICpldmlsMkVudW1lcmF0b3IgPSBb
ZXZpbDJUaGlyZFBhcnR5LnVuZGVyRmlyc3RQYXJ0aWVzIG9iamVjdEVudW1lcmF0b3JdOwotICAg
ICAgICBfV0tSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRmlyc3RQYXJ0eSAqZXZpbDJGaXJzdFBhcnR5
MSA9IFtldmlsMkVudW1lcmF0b3IgbmV4dE9iamVjdF07Ci0KLSAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKGV2aWwyRmlyc3RQYXJ0eTEuZmlyc3RQYXJ0eURvbWFpbiwgQCJ3ZWJraXQub3JnIik7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShldmlsMkZpcnN0UGFydHkxLnRoaXJkUGFydHlTdG9yYWdlQWNj
ZXNzR3JhbnRlZCk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKLSAgICB9XTsKLQotICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwotfQotCi1URVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIEdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhU3VtbWFyeURhdGFiYXNl
KQotewotICAgIGF1dG8gKnNoYXJlZFByb2Nlc3NQb29sID0gW1dLUHJvY2Vzc1Bvb2wgX3NoYXJl
ZFByb2Nlc3NQb29sXTsKLSAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0YVN0b3Jl
IGRlZmF1bHREYXRhU3RvcmVdOwotCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICBbY29uZmlndXJhdGlv
biBzZXRQcm9jZXNzUG9vbDogc2hhcmVkUHJvY2Vzc1Bvb2xdOwotICAgIGNvbmZpZ3VyYXRpb24u
Z2V0KCkud2Vic2l0ZURhdGFTdG9yZSA9IGRhdGFTdG9yZTsKLQotICAgIGF1dG8gd2ViVmlldzEg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOwotICAgIGF1
dG8gd2ViVmlldzIgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQo
KV0pOwotICAgIGF1dG8gd2ViVmlldzMgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOwotCi0gICAgW3dlYlZpZXcxIGxvYWRIVE1MU3RyaW5nOkAiV2ViS2l0
IFRlc3QiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vd2Via2l0Lm9yZyJd
XTsKLSAgICBbd2ViVmlldzEgX3Rlc3Rfd2FpdEZvckRpZEZpbmlzaE5hdmlnYXRpb25dOwotICAg
IFt3ZWJWaWV3MiBsb2FkSFRNTFN0cmluZzpAIldlYktpdCBUZXN0IiBiYXNlVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiaHR0cDovL3dlYmtpdDIub3JnIl1dOwotICAgIFt3ZWJWaWV3MiBfdGVz
dF93YWl0Rm9yRGlkRmluaXNoTmF2aWdhdGlvbl07Ci0gICAgW3dlYlZpZXczIGxvYWRIVE1MU3Ry
aW5nOkAiV2ViS2l0IFRlc3QiIGJhc2VVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
d2Via2l0My5vcmciXV07Ci0gICAgW3dlYlZpZXczIF90ZXN0X3dhaXRGb3JEaWRGaW5pc2hOYXZp
Z2F0aW9uXTsKLQotICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFi
bGVkOllFU107Ci0KICAgICBfX2Jsb2NrIGJvb2wgZG9uZUZsYWcgPSBmYWxzZTsKICAgICBbZGF0
YVN0b3JlIF9zZXRUaGlyZFBhcnR5Q29va2llQmxvY2tpbmdNb2RlOnRydWUgb25seU9uU2l0ZXNX
aXRob3V0VXNlckludGVyYWN0aW9uOmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsK
ICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>